Table of Contents
مفهوم لیست در پایتون
لیست یکی از مهمترین و پرکاربردترین ساختارهای داده در پایتون است. با لیست میتوانیم چندین مقدار را به ترتیب در کنار هم نگه داریم؛ مثل یک ردیف از خانهها که در هر خانه یک مقدار ذخیره شده است.
نمونهای از یک لیست:
numbers = [10, 20, 30, 40]
names = ["Ali", "Sara", "Reza"]
mixed = [1, "Hello", True, 3.14]نکتهها:
- لیست با
[و]ساخته میشود. - عناصر لیست با
,از هم جدا میشوند. - یک لیست میتواند انواع دادهٔ مختلف را با هم نگه دارد (عدد، رشته، بولی، …).
ایجاد لیست
چند روش سادهٔ ساخت لیست:
empty_list = [] # لیست خالی
numbers = [1, 2, 3, 4, 5] # لیست عددی
words = ["python", "list"] # لیست رشتهای
mixed = [1, "a", False] # لیست ترکیبی
میتوانیم با سازندهٔ list() هم لیست بسازیم:
text = "hello"
chars = list(text) # ['h', 'e', 'l', 'l', 'o']اندیسدهی (Indexing) در لیست
هر عنصر در لیست یک «اندیس» دارد. اندیس از $0$ شروع میشود.
numbers = [10, 20, 30, 40]
print(numbers[0]) # 10
print(numbers[1]) # 20
print(numbers[3]) # 40اگر به اندیسی که وجود ندارد دسترسی بزنید، خطا رخ میدهد:
numbers = [10, 20, 30]
print(numbers[5]) # خطا: IndexErrorاندیس منفی
با اندیس منفی میتوانیم از انتهای لیست شروع کنیم:
-1آخرین عنصر-2یکی مانده به آخر- و …
numbers = [10, 20, 30, 40]
print(numbers[-1]) # 40
print(numbers[-2]) # 30تغییر عناصر لیست (Mutable بودن)
لیست در پایتون «قابل تغییر» است (mutable). یعنی میتوانیم بعد از ساخته شدن، مقدار خانههای آن را عوض کنیم.
numbers = [10, 20, 30]
numbers[1] = 200
print(numbers) # [10, 200, 30]میتوانیم یک بخش از لیست را هم جایگزین کنیم (با اسلایس):
numbers = [1, 2, 3, 4, 5]
numbers[1:4] = [20, 30] # جایگزینی بخشی از لیست
print(numbers) # [1, 20, 30, 5]طول لیست با `len()`
برای فهمیدن تعداد عناصر لیست از تابع len() استفاده میکنیم:
numbers = [10, 20, 30, 40]
print(len(numbers)) # 4اسلایس گرفتن از لیست (Slicing)
با اسلایس میتوانیم یک زیرلیست (بخشی از لیست) بسازیم:
فرم کلی:
$$
list[start:stop:step]
$$
startاندیس شروع (شامل)stopاندیس پایان (غیرشامل)stepگام (اختیاری)
مثالها:
numbers = [10, 20, 30, 40, 50, 60]
print(numbers[1:4]) # [20, 30, 40]
print(numbers[:3]) # [10, 20, 30]
print(numbers[3:]) # [40, 50, 60]
print(numbers[::2]) # [10, 30, 50]
print(numbers[::-1]) # برعکس کردن لیست: [60, 50, 40, 30, 20, 10]افزودن عناصر به لیست
`append()` – افزودن در انتهای لیست
numbers = [1, 2, 3]
numbers.append(4)
print(numbers) # [1, 2, 3, 4]`insert()` – افزودن در موقعیت دلخواه
numbers = [1, 2, 4]
numbers.insert(2, 3) # در اندیس 2 مقدار 3 را قرار بده
print(numbers) # [1, 2, 3, 4]
ساختار insert:
$$
list.insert(index, value)
$$
`extend()` – افزودن چندین عنصر از یک لیست دیگر
a = [1, 2]
b = [3, 4, 5]
a.extend(b)
print(a) # [1, 2, 3, 4, 5]
تفاوت append و extend:
a = [1, 2]
a.append([3, 4])
print(a) # [1, 2, [3, 4]] (یک لیست به عنوان یک عنصر)
b = [1, 2]
b.extend([3, 4])
print(b) # [1, 2, 3, 4] (عناصر جداگانه اضافه شدهاند)حذف عناصر از لیست
`remove()` – حذف بر اساس مقدار
اولین عنصری که مقدارش برابر است را حذف میکند:
numbers = [10, 20, 30, 20]
numbers.remove(20)
print(numbers) # [10, 30, 20]اگر مقدار وجود نداشته باشد، خطا میدهد.
`pop()` – حذف بر اساس اندیس (و برگرداندن آن)
numbers = [10, 20, 30]
x = numbers.pop(1)
print(x) # 20
print(numbers) # [10, 30]اگر اندیس ندهید، آخرین عنصر حذف و برگردانده میشود:
numbers = [10, 20, 30]
last = numbers.pop()
print(last) # 30
print(numbers) # [10, 20]`del` – حذف با استفاده از دستور
numbers = [10, 20, 30, 40]
del numbers[1]
print(numbers) # [10, 30, 40]
del numbers[1:3] # حذف بازه
print(numbers) # [10]پاککردن کامل لیست با `clear()`
numbers = [1, 2, 3]
numbers.clear()
print(numbers) # []جستجو در لیست
عملگر `in`
برای بررسی وجود یک مقدار در لیست:
numbers = [10, 20, 30]
print(20 in numbers) # True
print(50 in numbers) # False`index()` – پیدا کردن اندیس یک مقدار
numbers = [10, 20, 30, 20]
print(numbers.index(20)) # 1 (اولین 20)اگر مقدار وجود نداشته باشد، خطا میدهد.
`count()` – شمردن تعداد تکرار یک مقدار
numbers = [10, 20, 20, 30, 20]
print(numbers.count(20)) # 3
print(numbers.count(40)) # 0مرتبسازی و برعکس کردن لیست
`sort()` – مرتبسازی درجا (in-place)
numbers = [30, 10, 40, 20]
numbers.sort()
print(numbers) # [10, 20, 30, 40]مرتبسازی نزولی:
numbers = [30, 10, 40, 20]
numbers.sort(reverse=True)
print(numbers) # [40, 30, 20, 10]برای رشتهها هم کار میکند:
names = ["Sara", "Ali", "Reza"]
names.sort()
print(names) # بر اساس ترتیب حروف الفبا`sorted()` – ساخت یک لیست مرتبشدهٔ جدید
numbers = [30, 10, 40, 20]
new_list = sorted(numbers)
print(new_list) # [10, 20, 30, 40]
print(numbers) # [30, 10, 40, 20] (تغییر نکرده)`reverse()` – برعکس کردن ترتیب فعلی لیست
numbers = [1, 2, 3]
numbers.reverse()
print(numbers) # [3, 2, 1]
تفاوت با [::-1] این است که reverse() خود لیست را تغییر میدهد.
لیستهای تودرتو (Nested Lists)
میتوانیم درون یک لیست، لیستهای دیگر داشته باشیم؛ مثل جدول یا ماتریس.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrix[0]) # [1, 2, 3]
print(matrix[0][1]) # 2
print(matrix[2][2]) # 9کپیکردن لیست
اگر فقط با = یک لیست را به متغیر دیگری بدهید، هر دو به یک لیست اشاره میکنند:
a = [1, 2, 3]
b = a
b[0] = 100
print(a) # [100, 2, 3]
print(b) # [100, 2, 3]برای ساختن یک کپی مستقل:
روش اسلایس
a = [1, 2, 3]
b = a[:] # کپی سطحی
b[0] = 100
print(a) # [1, 2, 3]
print(b) # [100, 2, 3]متد `copy()`
a = [1, 2, 3]
b = a.copy()
b[1] = 200
print(a) # [1, 2, 3]
print(b) # [1, 200, 3]برای لیستهای ساده این دو روش کافی هستند.
عملیاتهای مفید دیگر روی لیستها
بههم چسباندن لیستها با `+`
a = [1, 2]
b = [3, 4]
c = a + b
print(c) # [1, 2, 3, 4]تکرار لیست با `*`
numbers = [0]
repeated = numbers * 5
print(repeated) # [0, 0, 0, 0, 0]تبدیل رشته به لیست و برعکس
text = "Ali,Reza,Sara"
names = text.split(",") # ['Ali', 'Reza', 'Sara']
joined = "-".join(names)
print(joined) # Ali-Reza-Sara
(رفتار متد split و join در فصلهای مربوط به رشتهها بیشتر دیده شده است؛ اینجا فقط کاربردشان با لیست را میبینید.)
چند الگوی پرکاربرد با لیستها
پیدا کردن بزرگترین / کوچکترین مقدار
numbers = [10, 5, 8, 20]
print(max(numbers)) # 20
print(min(numbers)) # 5جمع عناصر لیست عددی
numbers = [1, 2, 3, 4]
print(sum(numbers)) # 10ساخت لیست از ورودیهای کاربر (ایدهٔ ساده)
numbers = []
numbers.append(int(input("عدد اول: ")))
numbers.append(int(input("عدد دوم: ")))
numbers.append(int(input("عدد سوم: ")))
print(numbers)تمرینهای پیشنهادی
برای تمرین لیستها، میتوانید این کارها را انجام دهید:
- لیستی از نمرههای خود بسازید و:
- میانگین آنها را حساب کنید.
- بالاترین و پایینترین نمره را چاپ کنید.
- برنامهای بنویسید که ۵ نام از کاربر بگیرد و در یک لیست ذخیره کند، سپس:
- نامها را به ترتیب الفبایی چاپ کند.
- بررسی کند یک نام خاص در لیست هست یا نه.
- یک «فهرست خرید» ساده پیادهسازی کنید:
- اضافهکردن آیتم
- حذفکردن آیتم
- نمایش فهرست فعلی
در فصلهای بعدی، از لیستها همراه با حلقهها و توابع استفاده خواهید کرد و کاربرد واقعی آنها را در برنامههای بزرگتر خواهید دید.