۵

لیست‌ها و توپل‌ها 📋

یاد می‌گیریم چطور داده‌ها رو گروه‌بندی کنیم!

لیست‌ها (Lists)

لیست‌ها mutable هستند (قابل تغییر) و با براکت‌های [] تعریف می‌شوند:

ایجاد و دسترسی به لیست‌ها
# ایجاد لیست
fruits = ["سیب", "موز", "پرتقال", "انگور"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]

# دسترسی به عناصر (ایندکس از 0 شروع می‌شود)
print(fruits[0])    # سیب
print(fruits[1])    # موز
print(fruits[-1])   # انگور (آخرین عنصر)

# تغییر عناصر
fruits[0] = "هلو"
print(fruits)       # ['هلو', 'موز', 'پرتقال', 'انگور']

# طول لیست
print(len(fruits))  # 4
متدهای مهم لیست
fruits = ["سیب", "موز"]

# اضافه کردن
fruits.append("پرتقال")      # ['سیب', 'موز', 'پرتقال']
fruits.insert(1, "هلو")      # ['سیب', 'هلو', 'موز', 'پرتقال']

# حذف کردن
fruits.remove("موز")         # ['سیب', 'هلو', 'پرتقال']
popped = fruits.pop()        # پرتقال حذف می‌شود
fruits.pop(0)                # سیب حذف می‌شود

# سایر متدها
numbers = [3, 1, 4, 1, 5]
numbers.sort()               # [1, 1, 3, 4, 5]
numbers.reverse()            # [5, 4, 3, 1, 1]
count = numbers.count(1)     # 2
index = numbers.index(3)     # 2

توپل‌ها (Tuples)

توپل‌ها immutable هستند (غیرقابل تغییر) و با پرانتزهای () تعریف می‌شوند:

ایجاد و کار با توپل‌ها
# ایجاد توپل
colors = ("قرمز", "سبز", "آبی")
coordinates = (10, 20)
single_item = (42,)  #注意: کاما ضروری است

# دسترسی به عناصر
print(colors[0])    # قرمز
print(colors[-1])   # آبی

# توپل‌ها غیرقابل تغییر هستند
# colors[0] = "زرد"  # Error! نمی‌توان تغییر داد

# unpacking توپل
x, y = coordinates
print(x, y)  # 10 20

# تبدیل بین لیست و توپل
colors_list = list(colors)
colors_tuple = tuple(colors_list)

💡 نکته: از توپل‌ها برای داده‌هایی استفاده می‌کنیم که نباید تغییر کنند (مثل مختصات، تنظیمات ثابت، etc).

عملیات روی لیست‌ها و توپل‌ها

عملیات مختلفی رو می‌تونیم روی این ساختارها انجام بدیم:

عملیات رایج
# الحاق
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2  # [1, 2, 3, 4, 5, 6]

# تکرار
repeated = list1 * 3  # [1, 2, 3, 1, 2, 3, 1, 2, 3]

# بررسی وجود عنصر
fruits = ["سیب", "موز", "پرتقال"]
print("سیب" in fruits)  # True
print("انگور" in fruits)  # False

# برش (Slicing)
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numbers[2:5])    # [2, 3, 4]
print(numbers[:3])     # [0, 1, 2]
print(numbers[7:])     # [7, 8, 9]
print(numbers[::2])    # [0, 2, 4, 6, 8] (هر دومان)
print(numbers[::-1])   # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (معکوس)

لیست‌های تو در تو

می‌تونیم لیست‌هایی داشته باشیم که خودشون شامل لیست‌های دیگه هستند:

لیست‌های دو بعدی
# ماتریس 3x3
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

# دسترسی به عناصر
print(matrix[0][0])  # 1
print(matrix[1][2])  # 6

# پیمایش ماتریس
for row in matrix:
    for item in row:
        print(item, end=" ")
    print()

# خروجی:
# 1 2 3
# 4 5 6
# 7 8 9

تمرین! 🧠

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

  1. مجموع اعداد رو محاسبه کنه
  2. میانگین اعداد رو محاسبه کنه
  3. بزرگترین و کوچکترین عدد رو پیدا کنه
  4. لیست رو به صورت معکوس مرتب کنه (بدون استفاده از reverse)

جواب تمرین

numbers = [5, 2, 8, 1, 9, 3]

# 1. مجموع
total = sum(numbers)
print("مجموع:", total)

# 2. میانگین
average = total / len(numbers)
print("میانگین:", average)

# 3. بزرگترین و کوچکترین
max_num = max(numbers)
min_num = min(numbers)
print("بزرگترین:", max_num)
print("کوچکترین:", min_num)

# 4. معکوس کردن
reversed_list = numbers[::-1]
print("معکوس شده:", reversed_list)