Kahibaro
Discord Login Register

لیست‌ها (Lists)

Table of Contents

مفهوم لیست در پایتون

لیست یکی از مهم‌ترین و پرکاربردترین ساختارهای داده در پایتون است. با لیست می‌توانیم چندین مقدار را به ترتیب در کنار هم نگه داریم؛ مثل یک ردیف از خانه‌ها که در هر خانه یک مقدار ذخیره شده است.

نمونه‌ای از یک لیست:

python
numbers = [10, 20, 30, 40]
names = ["Ali", "Sara", "Reza"]
mixed = [1, "Hello", True, 3.14]

نکته‌ها:

ایجاد لیست

چند روش سادهٔ ساخت لیست:

python
empty_list = []              # لیست خالی
numbers = [1, 2, 3, 4, 5]    # لیست عددی
words = ["python", "list"]   # لیست رشته‌ای
mixed = [1, "a", False]      # لیست ترکیبی

می‌توانیم با سازندهٔ list() هم لیست بسازیم:

python
text = "hello"
chars = list(text)   # ['h', 'e', 'l', 'l', 'o']

اندیس‌دهی (Indexing) در لیست

هر عنصر در لیست یک «اندیس» دارد. اندیس از $0$ شروع می‌شود.

python
numbers = [10, 20, 30, 40]
print(numbers[0])   # 10
print(numbers[1])   # 20
print(numbers[3])   # 40

اگر به اندیسی که وجود ندارد دسترسی بزنید، خطا رخ می‌دهد:

python
numbers = [10, 20, 30]
print(numbers[5])   # خطا: IndexError

اندیس منفی

با اندیس منفی می‌توانیم از انتهای لیست شروع کنیم:

python
numbers = [10, 20, 30, 40]
print(numbers[-1])  # 40
print(numbers[-2])  # 30

تغییر عناصر لیست (Mutable بودن)

لیست در پایتون «قابل تغییر» است (mutable). یعنی می‌توانیم بعد از ساخته شدن، مقدار خانه‌های آن را عوض کنیم.

python
numbers = [10, 20, 30]
numbers[1] = 200
print(numbers)   # [10, 200, 30]

می‌توانیم یک بخش از لیست را هم جایگزین کنیم (با اسلایس):

python
numbers = [1, 2, 3, 4, 5]
numbers[1:4] = [20, 30]   # جایگزینی بخشی از لیست
print(numbers)            # [1, 20, 30, 5]

طول لیست با `len()`

برای فهمیدن تعداد عناصر لیست از تابع len() استفاده می‌کنیم:

python
numbers = [10, 20, 30, 40]
print(len(numbers))   # 4

اسلایس گرفتن از لیست (Slicing)

با اسلایس می‌توانیم یک زیرلیست (بخشی از لیست) بسازیم:

فرم کلی:

$$
list[start:stop:step]
$$

مثال‌ها:

python
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()` – افزودن در انتهای لیست

python
numbers = [1, 2, 3]
numbers.append(4)
print(numbers)   # [1, 2, 3, 4]

`insert()` – افزودن در موقعیت دلخواه

python
numbers = [1, 2, 4]
numbers.insert(2, 3)   # در اندیس 2 مقدار 3 را قرار بده
print(numbers)         # [1, 2, 3, 4]

ساختار insert:

$$
list.insert(index, value)
$$

`extend()` – افزودن چندین عنصر از یک لیست دیگر

python
a = [1, 2]
b = [3, 4, 5]
a.extend(b)
print(a)   # [1, 2, 3, 4, 5]

تفاوت append و extend:

python
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()` – حذف بر اساس مقدار

اولین عنصری که مقدارش برابر است را حذف می‌کند:

python
numbers = [10, 20, 30, 20]
numbers.remove(20)
print(numbers)   # [10, 30, 20]

اگر مقدار وجود نداشته باشد، خطا می‌دهد.

`pop()` – حذف بر اساس اندیس (و برگرداندن آن)

python
numbers = [10, 20, 30]
x = numbers.pop(1)
print(x)        # 20
print(numbers)  # [10, 30]

اگر اندیس ندهید، آخرین عنصر حذف و برگردانده می‌شود:

python
numbers = [10, 20, 30]
last = numbers.pop()
print(last)      # 30
print(numbers)   # [10, 20]

`del` – حذف با استفاده از دستور

python
numbers = [10, 20, 30, 40]
del numbers[1]
print(numbers)       # [10, 30, 40]
del numbers[1:3]     # حذف بازه
print(numbers)       # [10]

پاک‌کردن کامل لیست با `clear()`

python
numbers = [1, 2, 3]
numbers.clear()
print(numbers)   # []

جستجو در لیست

عملگر `in`

برای بررسی وجود یک مقدار در لیست:

python
numbers = [10, 20, 30]
print(20 in numbers)   # True
print(50 in numbers)   # False

`index()` – پیدا کردن اندیس یک مقدار

python
numbers = [10, 20, 30, 20]
print(numbers.index(20))   # 1 (اولین 20)

اگر مقدار وجود نداشته باشد، خطا می‌دهد.

`count()` – شمردن تعداد تکرار یک مقدار

python
numbers = [10, 20, 20, 30, 20]
print(numbers.count(20))   # 3
print(numbers.count(40))   # 0

مرتب‌سازی و برعکس کردن لیست

`sort()` – مرتب‌سازی درجا (in-place)

python
numbers = [30, 10, 40, 20]
numbers.sort()
print(numbers)   # [10, 20, 30, 40]

مرتب‌سازی نزولی:

python
numbers = [30, 10, 40, 20]
numbers.sort(reverse=True)
print(numbers)   # [40, 30, 20, 10]

برای رشته‌ها هم کار می‌کند:

python
names = ["Sara", "Ali", "Reza"]
names.sort()
print(names)   # بر اساس ترتیب حروف الفبا

`sorted()` – ساخت یک لیست مرتب‌شدهٔ جدید

python
numbers = [30, 10, 40, 20]
new_list = sorted(numbers)
print(new_list)   # [10, 20, 30, 40]
print(numbers)    # [30, 10, 40, 20] (تغییر نکرده)

`reverse()` – برعکس کردن ترتیب فعلی لیست

python
numbers = [1, 2, 3]
numbers.reverse()
print(numbers)   # [3, 2, 1]

تفاوت با [::-1] این است که reverse() خود لیست را تغییر می‌دهد.

لیست‌های تودرتو (Nested Lists)

می‌توانیم درون یک لیست، لیست‌های دیگر داشته باشیم؛ مثل جدول یا ماتریس.

python
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

کپی‌کردن لیست

اگر فقط با = یک لیست را به متغیر دیگری بدهید، هر دو به یک لیست اشاره می‌کنند:

python
a = [1, 2, 3]
b = a
b[0] = 100
print(a)   # [100, 2, 3]
print(b)   # [100, 2, 3]

برای ساختن یک کپی مستقل:

روش اسلایس

python
a = [1, 2, 3]
b = a[:]      # کپی سطحی
b[0] = 100
print(a)   # [1, 2, 3]
print(b)   # [100, 2, 3]

متد `copy()`

python
a = [1, 2, 3]
b = a.copy()
b[1] = 200
print(a)   # [1, 2, 3]
print(b)   # [1, 200, 3]

برای لیست‌های ساده این دو روش کافی هستند.

عملیات‌های مفید دیگر روی لیست‌ها

به‌هم چسباندن لیست‌ها با `+`

python
a = [1, 2]
b = [3, 4]
c = a + b
print(c)   # [1, 2, 3, 4]

تکرار لیست با `*`

python
numbers = [0]
repeated = numbers * 5
print(repeated)   # [0, 0, 0, 0, 0]

تبدیل رشته به لیست و برعکس

python
text = "Ali,Reza,Sara"
names = text.split(",")   # ['Ali', 'Reza', 'Sara']
joined = "-".join(names)
print(joined)   # Ali-Reza-Sara

(رفتار متد split و join در فصل‌های مربوط به رشته‌ها بیشتر دیده شده است؛ اینجا فقط کاربردشان با لیست را می‌بینید.)

چند الگوی پرکاربرد با لیست‌ها

پیدا کردن بزرگ‌ترین / کوچک‌ترین مقدار

python
numbers = [10, 5, 8, 20]
print(max(numbers))   # 20
print(min(numbers))   # 5

جمع عناصر لیست عددی

python
numbers = [1, 2, 3, 4]
print(sum(numbers))   # 10

ساخت لیست از ورودی‌های کاربر (ایدهٔ ساده)

python
numbers = []
numbers.append(int(input("عدد اول: ")))
numbers.append(int(input("عدد دوم: ")))
numbers.append(int(input("عدد سوم: ")))
print(numbers)

تمرین‌های پیشنهادی

برای تمرین لیست‌ها، می‌توانید این کارها را انجام دهید:

  1. لیستی از نمره‌های خود بسازید و:
    • میانگین آن‌ها را حساب کنید.
    • بالاترین و پایین‌ترین نمره را چاپ کنید.
  2. برنامه‌ای بنویسید که ۵ نام از کاربر بگیرد و در یک لیست ذخیره کند، سپس:
    • نام‌ها را به ترتیب الفبایی چاپ کند.
    • بررسی کند یک نام خاص در لیست هست یا نه.
  3. یک «فهرست خرید» ساده پیاده‌سازی کنید:
    • اضافه‌کردن آیتم
    • حذف‌کردن آیتم
    • نمایش فهرست فعلی

در فصل‌های بعدی، از لیست‌ها همراه با حلقه‌ها و توابع استفاده خواهید کرد و کاربرد واقعی آن‌ها را در برنامه‌های بزرگ‌تر خواهید دید.

Views: 8

Comments

Please login to add a comment.

Don't have an account? Register now!