1. آموزش لیست ها در python، معرفی لیست ها
لیستها یکی از پرکاربردترین و مهمترین ساختارهای داده در پایتون هستند. در ادامه، معرفی جامع و مختصری از لیستها، ویژگیها، عملیات و مثالهای کاربردی آنها ارائه میشود:
1.1 لیستها در پایتون چیست؟
لیستها (Lists) در پایتون، مجموعهای از عناصر هستند که در یک ترتیب خاص ذخیره میشوند. این عناصر میتوانند از انواع مختلف دادهای (مانند اعداد، رشتهها، دیگر لیستها، و …) باشند و ترتیب آنها در لیست حفظ میشود. لیستها در پایتون قابل تغییر (mutable) هستند، یعنی میتوانیم مقادیر داخل آنها را تغییر دهیم.
ساختار یک لیست:
my_list = [1, 2, 3, 4, 5] در این مثال، my_list یک لیست است که شامل اعداد ۱ تا ۵ است.
1.2 ویژگیهای لیستها
ترتیب: لیستها ترتیب عناصر را حفظ میکنند. به عبارت دیگر، عنصر اول در لیست همیشه اولین عنصر است.
قابلیت تغییر (Mutable): میتوانیم مقدار عناصر لیست را تغییر دهیم.
دسترسپذیری با ایندکس: میتوان به هر عنصر لیست با استفاده از ایندکس دسترسی پیدا کرد. ایندکسها از ۰ شروع میشوند.
تکرارپذیری: میتوان لیستها را تکرار کرد.
1.3 عملیات رایج بر روی لیستها
دسترسی به عناصر لیست
برای دسترسی به یک عنصر خاص از لیست، از ایندکس آن استفاده میکنیم.
my_list = [10, 20, 30, 40] print(my_list[0]) # دسترسی به اولین عنصر لیست print(my_list[2]) # دسترسی به سومین عنصر لیست
تغییر مقدار یک عنصر
چون لیستها قابل تغییر هستند، میتوانیم مقادیر داخل آنها را تغییر دهیم.
my_list = [10, 20, 30, 40] my_list[1] = 25 # تغییر مقدار عنصر دوم print(my_list) # خروجی: [10.25.30,40]
اضافه کردن عناصر به لیست
روش append(): برای افزودن یک عنصر به انتهای لیست.
my_list = [10, 20, 30] my_list.append(40) print(my_list) # خروجی: [10,20,30,40]
روش insert(): برای اضافه کردن یک عنصر در موقعیت مشخص در لیست.
my_list = [10, 20, 30] my_list.insert(1, 15) # افزودن 15 در موقعیت ایندکس 1 print(my_list) # خروجی: [10,15,20,30]
روش extend(): برای افزودن چندین عنصر از یک لیست دیگر به انتهای لیست اصلی.
my_list = [10, 20] my_list.extend([30, 40, 50]) print(my_list) # خروجی: [10,20,30,40,50]
حذف عناصر از لیست
چندین روش برای حذف عناصر از لیست وجود دارد:
روش remove(): حذف اولین مقدار مشخص شده از لیست.
my_list = [10, 20, 30, 20] my_list.remove(20) # حذف اولین 20 print(my_list) # خروجی: [10,30,20]
روش pop(): حذف عنصر در موقعیت خاص (ایندکس مشخص) و برگرداندن آن.
my_list = [10, 20, 30] removed_item = my_list.pop(1) # حذف عنصر با ایندکس 1 print(my_list) # خروجی: [10,30] print(removed_item) # خروجی: 20
روش clear(): حذف تمام عناصر لیست.
my_list = [10, 20, 30] my_list.clear() print(my_list) # خروجی: []
ترکیب لیستها
برای ترکیب دو یا چند لیست، میتوان از عملگر + یا روش extend() استفاده کرد.
list1 = [1, 2, 3] list2 = [4, 5, 6] combined = list1 + list2 # ترکیب دو لیست print(combined) # خروجی: [1,2,3,4,5,6]
مرتبسازی لیستها
برای مرتب کردن لیست، از متد sort() استفاده میکنیم که لیست را به صورت صعودی مرتب میکند، یا میتوانیم از sorted() برای برگشت یک لیست مرتب شده استفاده کنیم.
my_list = [30, 10, 20, 40] my_list.sort() # مرتب کردن لیست به صورت صعودی print(my_list) # خروجی: [10,20,30,40]
1.4 لیستهای تو در تو (Nested Lists)
پایتون از لیستهای تو در تو نیز پشتیبانی میکند. میتوانید لیستهایی داخل لیست دیگر داشته باشید.
nested_list = [[1, 2], [3, 4], [5, 6]] print(nested_list[0]) # خروجی: [1, 2] print(nested_list[1][1]) # خروجی: 4
1.5 ویژگیهای اضافی لیستها
محاسبه طول لیست با len():
my_list = [10, 20, 30] print(len(my_list)) # خروجی: 3
بررسی وجود یک عنصر با in:
my_list = [10, 20, 30] print(20 in my_list) # خروجی: True
1.6 مثالهای کاربردی
فیلتر کردن مقادیر بزرگتر از ۱۰ از یک لیست:
numbers = [5, 12, 8, 21, 14] filtered = [num for num in numbers if num > 10] print(filtered) # خروجی: [12, 21, 14]
جمع کردن تمام مقادیر یک لیست با استفاده از sum():
numbers = [1, 2, 3, 4, 5] total = sum(numbers) print(total) # خروجی: 15
2. دسترسی به آیتمها در لیست
2.1 دسترسی آیتم ها
لیستها در پایتون ترتیبپذیر هستند و از اندیسهای عددی برای دسترسی به آیتمها استفاده میکنند.
اندیسگذاری در لیستها
اندیسها از صفر شروع میشوند.
میتوان از اندیسهای منفی برای دسترسی به آیتمها از انتهای لیست استفاده کرد.
مثال:
my_list = [10, 20, 30, 40, 50] # دسترسی به آیتم اول (اندیس 0) print(my_list[0]) # خروجی: 10 # دسترسی به آیتم آخر با استفاده از اندیس منفی print(my_list[-1]) # خروجی: 50 # دسترسی به آیتم دوم از انتها print(my_list[-2]) # خروجی: 40 برشگذاری (Slicing) در لیستها میتوانید بخشهایی از لیست را با استفاده از عملگر : استخراج کنید. # استخراج آیتمها از اندیس 1 تا 3 (شامل اندیس 1 ولی شامل اندیس 3 نمیشود) print(my_list[1:3]) # خروجی: [20, 30]
نکات کلیدی:
اندیسگذاری در انواع دادههایی مثل لیستها و رشتهها از صفر شروع میشود.
در لیستها و رشتهها میتوان از اندیسهای منفی برای دسترسی به آیتمها از انتها استفاده کرد.
2.2 اندیس گذاری منفی
اندیسگذاری منفی (Negative Indexing) روشی است برای دسترسی به آیتمها در ساختارهای دادهای مانند لیستها، رشتهها، و حتی تاپلها که به شما این امکان را میدهد که از انتهای دادهها به آنها دسترسی پیدا کنید. به عبارت سادهتر، در اندیسگذاری منفی، میتوانید به عناصر از آخر به اول دسترسی پیدا کنید.
اصول اندیسگذاری منفی در لیستها
در اندیسگذاری مثبت (مثل [0], [1])، شما از ابتدای لیست شروع میکنید.
در اندیسگذاری منفی (مثل [-1], [-2])، شما از انتهای لیست شروع میکنید.
نحوه عملکرد اندیسهای منفی:
-1 به آخرین آیتم لیست اشاره میکند.
-2 به دومین آیتم از انتها اشاره میکند.
و همینطور به ترتیب پیش میرود.
دسترسی به آیتمها با استفاده از اندیس منفی:
my_list = [10, 20, 30, 40, 50] # اندیس -1 به آخرین آیتم (50) اشاره دارد print(my_list[-1]) # خروجی: 50 # اندیس -2 به دومین آیتم از انتها (40) اشاره دارد print(my_list[-2]) # خروجی: 40 # اندیس -3 به سومین آیتم از انتها (30) اشاره دارد print(my_list[-3]) # خروجی: 30 در اینجا: my_list[-1] به آخرین آیتم لیست (50) اشاره میکند. my_list[-2] به آیتم قبل از آخر (40) اشاره دارد. my_list[-3] به آیتم سوم از انتها (30) اشاره دارد.
استفاده از اندیس منفی برای دسترسی به بخشهایی از لیست (Slicing):
برای استفاده از برشگذاری (Slicing) به صورت منفی، میتوانید مشابه دسترسی به آیتمها با اندیسهای منفی، بخشهایی از لیست را انتخاب کنید.
به عنوان مثال:
# برش از آیتم دوم از انتها تا آخر لیست print(my_list[-2:]) # خروجی: [40, 50] # برش از آیتم سوم از انتها تا آیتم اول از انتها (از انتها به سمت جلو) print(my_list[-3:-1]) # خروجی: [30, 40]
در اینجا:
my_list[-2:] تمام آیتمها از دومین آیتم از انتها تا آخر لیست را شامل میشود (یعنی [40, 50]).
my_list[-3:-1] آیتمها از سومین آیتم از انتها تا دومین آیتم از انتها (بصورت بازهای) را شامل میشود (یعنی [30, 40]).
استفاده از اندیس منفی برای تغییر مقدار آیتم:
میتوانید از اندیسهای منفی برای تغییر مقادیر در لیستها نیز استفاده کنید.
# تغییر مقدار آخرین آیتم my_list[-1] = 100 # چاپ لیست پس از تغییر print(my_list) # خروجی: [10, 20, 30, 40, 100] در اینجا، my_list[-1] = 100 مقدار آخرین آیتم (50) را به 100 تغییر داده است.
نکات مهم:
اندیسهای منفی به شما این امکان را میدهند که به راحتی از انتهای لیست به عناصر دسترسی پیدا کنید.
اندیس منفی -1 همیشه به آخرین عنصر لیست اشاره دارد، در حالی که -2 به دومین عنصر از انتها و الی آخر.
کاربردهای اندیسگذاری منفی:
دسترسی سریع به آخرین آیتمها: اگر بخواهید به آخرین آیتمهای یک لیست دسترسی داشته باشید، میتوانید از اندیسهای منفی استفاده کنید.
برشگذاری از انتها: در برخی موارد، ممکن است بخواهید بخشی از لیست را از انتها به جلو برش بزنید، در این صورت اندیسهای منفی بسیار مفید هستند.
3. حلقه درون لیست
استفاده از حلقهها در پایتون برای کار با لیستها بسیار رایج است. حلقهها به شما این امکان را میدهند که به طور خودکار بر روی هر آیتم در یک لیست یا هر مجموعهای از دادهها عمل کنید. در اینجا نحوه استفاده از حلقهها در لیستها در پایتون را توضیح خواهم داد.
3.1 استفاده از حلقه for برای پیمایش (iterate) در لیست
حلقه for یکی از بهترین روشها برای پیمایش (iterate) درون لیستها است. با استفاده از حلقه for میتوانید به راحتی روی تمام آیتمهای یک لیست مرور کنید و بر روی هر آیتم عملیاتی انجام دهید.
ساختار حلقه for:
for item in list:
# عمل مورد نظر برای هر آیتم
در این ساختار:
list نام لیستی است که میخواهید روی آن حلقه بزنید.
item متغیری است که در هر تکرار حلقه به یکی از آیتمهای موجود در لیست اختصاص مییابد.
مثال:
my_list = [10, 20, 30, 40, 50] # استفاده از حلقه for برای پیمایش در لیست for item in my_list: print(item)
خروجی:
10 20 30 40 50
در این مثال، حلقه for روی تمامی آیتمهای لیست my_list میچرخد و هر بار مقدار آیتم جاری را در متغیر item قرار میدهد و سپس آن را چاپ میکند.
3.2 استفاده از حلقه while برای پیمایش در لیست
اگر نیاز دارید که از یک حلقه while برای پیمایش درون لیست استفاده کنید، میتوانید از آن هم بهره ببرید. این روش بیشتر زمانی کاربرد دارد که بخواهید در حین پیمایش در لیست، شرط خاصی را بررسی کنید یا تغییراتی در ایندکسها داشته باشید.
مثال:
my_list = [10, 20, 30, 40, 50] index = 0 # استفاده از حلقه while برای پیمایش در لیست while index < len(my_list): print(my_list[index]) index += 1
خروجی:
10 20 30 40 50
در اینجا:
حلقه while تا زمانی که index از طول لیست my_list کمتر باشد، ادامه مییابد.
در هر تکرار، مقدار لیست در ایندکس مشخص چاپ میشود و سپس مقدار index افزایش مییابد.
4. ساخت لیست جدید
ساختار اصلی List Comprehension:
new_list = [expression for item in iterable if condition]
توضیحات:
expression: مقداری که در لیست جدید قرار میگیرد.
item: هر آیتم در iterable (مثل لیست، مجموعه، رشته و غیره).
iterable: شیای که شما میخواهید روی آن پیمایش کنید (مثل یک لیست یا هر نوع دیگر از دادهها).
condition (اختیاری): شرطی که برای اضافه کردن هر آیتم به لیست جدید باید برقرار باشد.
4.1 ایجاد لیست جدید از لیست موجود
اگر بخواهید یک لیست جدید بسازید که مقادیر آن از یک لیست موجود گرفته شود، میتوانید از List Comprehension استفاده کنید.
مثال:
# لیست اولیه numbers = [1, 2, 3, 4, 5] # ایجاد یک لیست جدید که مربع هر عدد باشد squared_numbers = [x**2 for x in numbers] print(squared_numbers)
خروجی:
[1, 4, 9, 16, 25]
در این مثال:
x**2 به معنی گرفتن مربع هر عدد است.
لیست جدید squared_numbers شامل مربع هر عدد از لیست numbers است.
4.2 استفاده از شرط (Filter) در List Comprehension
با استفاده از شرط میتوانید فقط آیتمهایی را که یک ویژگی خاص دارند انتخاب کنید. این ویژگی میتواند هر چیزی باشد (مثل چک کردن عدد زوج یا فرد بودن، بررسی وجود یک رشته در یک عبارت، و غیره).
مثال:
# لیست اولیه numbers = [1, 2, 3, 4, 5, 6] # ایجاد یک لیست جدید که فقط شامل اعداد زوج باشد even_numbers = [x for x in numbers if x % 2 == 0] print(even_numbers)
خروجی:
[2, 4, 6]
در اینجا:
فقط اعداد زوج از لیست numbers به لیست even_numbers اضافه میشوند.
4.3 اعمال چندین عملیات در List Comprehension
شما میتوانید چندین عملیات مختلف مانند اعمال تغییرات یا اعمال شرطهای پیچیدهتر را در یک List Comprehension ترکیب کنید.
مثال:
# لیست اولیه numbers = [1, 2, 3, 4, 5, 6] # ایجاد یک لیست جدید که مربع اعداد زوج باشد squared_even_numbers = [x**2 for x in numbers if x % 2 == 0] print(squared_even_numbers)
خروجی:
[4, 16, 36]
در اینجا:
ابتدا اعداد زوج فیلتر میشوند و سپس مربع آنها در لیست جدید قرار میگیرد.
4.4 List Comprehension با رشتهها
میتوانید از List Comprehension برای کار با رشتهها نیز استفاده کنید. به عنوان مثال، میتوانید هر حرف از یک رشته را بررسی کرده و بر اساس شرایط خاص، آنها را به یک لیست تبدیل کنید.
مثال:
# رشته اولیه text = "Hello, World!" # ایجاد یک لیست جدید که فقط شامل حروف بزرگ باشد uppercase_letters = [char for char in text if char.isupper()] print(uppercase_letters)
خروجی:
['H', 'W']
در اینجا:
فقط حروف بزرگ از رشته “Hello, World!” استخراج میشوند و در لیست uppercase_letters قرار میگیرند.
4.5 تبدیل آیتمها به نوع دیگر در List Comprehension
میتوانید از List Comprehension برای تبدیل یا تغییر نوع دادهها استفاده کنید.
مثال:
# لیست اولیه از رشتهها numbers_as_strings = ["1", "2", "3", "4", "5"] # تبدیل رشتهها به اعداد صحیح numbers = [int(x) for x in numbers_as_strings] print(numbers)
خروجی:
[1, 2, 3, 4, 5]
در اینجا:
رشتهها با استفاده از int(x) به اعداد صحیح تبدیل میشوند.
4.6 List Comprehension چندبعدی (Nested List Comprehension)
اگر شما نیاز به ایجاد لیستهایی از لیستهای دیگر داشته باشید (مانند لیستهای دو بعدی)، میتوانید از Nested List Comprehension استفاده کنید.
مثال:
# یک ماتریس ۲x2 matrix = [[1, 2], [3, 4]] # استفاده از nested list comprehension برای مسطح کردن ماتریس flattened = [element for row in matrix for element in row] print(flattened)
خروجی:
[1, 2, 3, 4]
در اینجا:
در ابتدا، حلقه روی هر ردیف از matrix پیمایش میکند.
سپس حلقه دوم روی هر عنصر از آن ردیف پیمایش کرده و آن را در لیست flattened قرار میدهد.
5. ترکیب 2 لیست
5.1 استفاده از عملگر + برای ترکیب دو لیست
عملگر + به شما این امکان را میدهد که دو یا چند لیست را با هم ترکیب کنید و یک لیست جدید ایجاد کنید.
مثال:
list1 = [1, 2, 3] list2 = [4, 5, 6] combined_list = list1 + list2 print(combined_list)
خروجی:
[1, 2, 3, 4, 5, 6]
در اینجا، لیست list1 و list2 با استفاده از عملگر + به هم متصل شده و لیست جدید combined_list ساخته شده است.
5.2 استفاده از متد extend()
متد extend() به شما این امکان را میدهد که تمام اعضای یک لیست را به انتهای لیست دیگر اضافه کنید. این متد لیست اصلی را تغییر میدهد.
مثال:
list1 = [1, 2, 3] list2 = [4, 5, 6] list1.extend(list2) print(list1)
خروجی:
[1, 2, 3, 4, 5, 6]
در اینجا، متد extend() لیست list2 را به انتهای list1 اضافه کرده است. توجه کنید که این کار باعث تغییر لیست list1 میشود.
5.3 استفاده از * در ترکیب چند لیست
اگر میخواهید چندین لیست را با هم ترکیب کنید، میتوانید از * (آرخپاک کننده) استفاده کنید. این روش بسیار مفید است وقتی که تعداد لیستها زیاد باشد.
مثال:
list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [7, 8, 9] combined_list = [*list1, *list2, *list3] print(combined_list)
خروجی:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
در اینجا، از * برای “بازکردن” هر لیست و ترکیب آنها استفاده کردیم.
5.4 استفاده از itertools.chain()
کتابخانه itertools یک ابزار مفید برای ترکیب لیستها است. تابع chain() این امکان را فراهم میکند که چندین لیست را به صورت کارآمد و بدون نیاز به استفاده از عملگرهای اضافی ترکیب کنید.
مثال:
import itertools list1 = [1, 2, 3] list2 = [4, 5, 6] combined_list = list(itertools.chain(list1, list2)) print(combined_list)
خروجی:
[1, 2, 3, 4, 5, 6]
در اینجا، با استفاده از itertools.chain()، لیستها به هم متصل شدهاند و نتیجه نهایی به صورت یک لیست جدید برگشت داده میشود.
5.5 استفاده از append()
اگر بخواهید هر عنصر از یک لیست را به طور جداگانه به لیست دیگر اضافه کنید، میتوانید از متد append() استفاده کنید. این روش برای ترکیب لیستها به صورت یکی یکی است.
مثال:
list1 = [1, 2, 3] list2 = [4, 5, 6] for item in list2: list1.append(item) print(list1)
خروجی:
[1, 2, 3, 4, 5, 6]
در اینجا، با استفاده از حلقه for، هر عنصر از لیست list2 به لیست list1 اضافه شده است.
6. متد های لیست در پایتون

