~/icsd.ir — bash
SYSTEM_ONLINE

لیست و تاپل

لیست و تاپل دو ساختار داده مرتب در پایتون هستند که چندین مقدار را در یک متغیر ذخیره می‌کنند. لیست تغییرپذیر و تاپل تغییرناپذیر است.

لیست و تاپل دو ساختار داده مرتب در پایتون هستند که چندین مقدار را در یک متغیر ذخیره می‌کنند. لیست تغییرپذیر و تاپل تغییرناپذیر است.

لیست (List)

لیست مرتب، تغییرپذیر و می‌تواند هر نوع داده را نگه دارد:

# ساخت لیست
fruits = ["سیب", "موز", "پرتقال"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "متن", 3.14, True, None]
empty = []

# ساخت با list()
chars = list("سلام")
print(chars)    # ['س', 'ل', 'ا', 'م']

nums = list(range(5))
print(nums)     # [0, 1, 2, 3, 4]

دسترسی و اصلاح

fruits = ["سیب", "موز", "پرتقال"]

# دسترسی
print(fruits[0])       # سیب
print(fruits[-1])      # پرتقال

# اصلاح (برخلاف رشته، مجاز است)
fruits[1] = "هلو"
print(fruits)          # ['سیب', 'هلو', 'پرتقال']

# slicing مثل رشته
print(fruits[0:2])     # ['سیب', 'هلو']
print(fruits[::-1])    # ['پرتقال', 'هلو', 'سیب']

# جایگزینی چندتایی
fruits[0:2] = ["انار", "هندوانه"]
print(fruits)          # ['انار', 'هندوانه', 'پرتقال']

متدهای لیست

اضافه کردن

fruits = ["سیب", "موز"]

# append - اضافه به آخر
fruits.append("پرتقال")
print(fruits)    # ['سیب', 'موز', 'پرتقال']

# insert - در موقعیت خاص
fruits.insert(1, "هلو")
print(fruits)    # ['سیب', 'هلو', 'موز', 'پرتقال']

# extend - اضافه کردن چند آیتم
fruits.extend(["انار", "انگور"])
print(fruits)

# روش جایگزین
fruits += ["خربزه"]   # مثل extend

حذف

fruits = ["سیب", "موز", "پرتقال", "موز"]

# remove - حذف اولین مورد منطبق
fruits.remove("موز")
print(fruits)    # ['سیب', 'پرتقال', 'موز']

# pop - حذف و بازگرداندن (پیش‌فرض آخرین)
last = fruits.pop()
print(last)      # موز
print(fruits)    # ['سیب', 'پرتقال']

# pop(index)
first = fruits.pop(0)
print(first)     # سیب

# del - حذف بدون بازگرداندن
nums = [1, 2, 3, 4, 5]
del nums[0]
print(nums)      # [2, 3, 4, 5]

del nums[1:3]    # حذف بازه
print(nums)      # [2, 5]

# clear - حذف همه
fruits.clear()
print(fruits)    # []

جستجو و شمارش

nums = [1, 2, 3, 2, 4, 2, 5]

print(nums.count(2))    # 3 - تعداد تکرار
print(nums.index(3))    # 2 - اولین موقعیت
# nums.index(99)         # ValueError

# بهتر: ابتدا چک کنید
if 99 in nums:
    print(nums.index(99))
else:
    print("یافت نشد")

مرتب‌سازی

nums = [3, 1, 4, 1, 5, 9, 2, 6]

# sort - تغییر خود لیست
nums.sort()
print(nums)              # [1, 1, 2, 3, 4, 5, 6, 9]

# نزولی
nums.sort(reverse=True)
print(nums)              # [9, 6, 5, 4, 3, 2, 1, 1]

# sorted - بدون تغییر اصل
original = [3, 1, 4, 1, 5]
sorted_list = sorted(original)
print(original)          # [3, 1, 4, 1, 5]
print(sorted_list)       # [1, 1, 3, 4, 5]

# مرتب‌سازی با key
words = ["python", "is", "awesome", "language"]
words.sort(key=len)
print(words)    # ['is', 'python', 'awesome', 'language']

# مرتب‌سازی دیکشنری در لیست
products = [
    {"name": "A", "price": 100},
    {"name": "B", "price": 50},
    {"name": "C", "price": 75},
]
products.sort(key=lambda p: p["price"])
print(products)
# [{'name':'B','price':50}, {'name':'C','price':75}, {'name':'A','price':100}]

معکوس

nums = [1, 2, 3, 4, 5]
nums.reverse()
print(nums)         # [5, 4, 3, 2, 1]

# یا با slicing
nums = [1, 2, 3, 4, 5]
reversed_nums = nums[::-1]

List Comprehension

روش فشرده برای ساخت لیست:

# مربعات
squares = [x**2 for x in range(10)]
print(squares)
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# با شرط (filter)
evens = [x for x in range(20) if x % 2 == 0]
print(evens)

# با تبدیل
words = ["hello", "world", "python"]
upper = [w.upper() for w in words]
print(upper)    # ['HELLO', 'WORLD', 'PYTHON']

# دو شرط
result = [x for x in range(50) if x % 2 == 0 if x % 3 == 0]
print(result)   # [0, 6, 12, 18, 24, 30, 36, 42, 48]

# دو حلقه - ضرب
products = [(i, j, i*j) for i in range(1, 4) for j in range(1, 4)]
print(products)

# تو در تو
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [num for row in matrix for num in row]
print(flat)     # [1, 2, 3, 4, 5, 6, 7, 8, 9]

# با شرط ternary
labels = ["زوج" if x % 2 == 0 else "فرد" for x in range(5)]
print(labels)   # ['زوج', 'فرد', 'زوج', 'فرد', 'زوج']

کپی کردن لیست

# این کپی نیست! دو متغیر به یک لیست اشاره می‌کنند
a = [1, 2, 3]
b = a
b.append(4)
print(a)    # [1, 2, 3, 4]  ← a هم تغییر کرد!

# روش‌های صحیح کپی
a = [1, 2, 3]
b = a.copy()        # روش ۱
c = list(a)         # روش ۲
d = a[:]            # روش ۳

b.append(4)
print(a)    # [1, 2, 3]
print(b)    # [1, 2, 3, 4]

# توجه: کپی سطحی (shallow copy)
matrix = [[1, 2], [3, 4]]
copy = matrix.copy()
copy[0].append(99)
print(matrix)   # [[1, 2, 99], [3, 4]]  ← داخلی هم عوض شد!

# برای کپی عمیق
import copy
deep = copy.deepcopy(matrix)

پیمایش لیست

fruits = ["سیب", "موز", "پرتقال"]

# روش معمول
for fruit in fruits:
    print(fruit)

# با اندیس
for i, fruit in enumerate(fruits):
    print(f"{i}. {fruit}")

# پیمایش معکوس
for fruit in reversed(fruits):
    print(fruit)

# پیمایش مرتب‌شده
for fruit in sorted(fruits):
    print(fruit)

# دو لیست همزمان
prices = [5000, 3000, 4500]
for fruit, price in zip(fruits, prices):
    print(f"{fruit}: {price}")

تاپل (Tuple)

تاپل مثل لیست است ولی تغییرناپذیر:

# ساخت تاپل
point = (3, 5)
person = ("علی", 25, "کاشان")
single = (1,)        # تاپل تک‌عضوی - کاما الزامی!
empty = ()

# بدون پرانتز هم می‌شود (Tuple Packing)
coords = 3, 5
print(coords)    # (3, 5)
print(type(coords))   # <class 'tuple'>

# دسترسی مثل لیست
print(point[0])      # 3
print(person[1])     # 25

# اما تغییر مجاز نیست
# point[0] = 10      # TypeError!

چرا تاپل؟

  • سرعت: از لیست سریع‌تر است
  • امنیت: داده‌های ثابت اشتباه عوض نمی‌شوند
  • کلید دیکشنری: تاپل می‌تواند کلید باشد، لیست نه
  • بازگرداندن چند مقدار از تابع

Tuple Unpacking

# باز کردن تاپل
person = ("علی", 25, "کاشان")
name, age, city = person
print(name, age, city)

# جابجایی متغیرها
a, b = 5, 10
a, b = b, a   # حالا a=10, b=5

# با * برای بقیه
nums = (1, 2, 3, 4, 5)
first, *middle, last = nums
print(first)    # 1
print(middle)   # [2, 3, 4]
print(last)     # 5

# بازگرداندن چند مقدار از تابع
def get_min_max(numbers):
    return min(numbers), max(numbers)

low, high = get_min_max([3, 1, 4, 1, 5, 9])
print(low, high)   # 1 9

لیست یا تاپل؟

ویژگی لیست تاپل
تغییرپذیر ✅ بله ❌ خیر
سرعت کندتر سریع‌تر
حافظه بیشتر کمتر
سینتکس [] ()
کلید dict
کاربرد مجموعه‌ای که تغییر می‌کند داده‌های ثابت، رکورد

تمرین فصل

🏋️ تمرین ۱: لیستی از ۱۰ عدد بگیرید و میانگین، بیشترین و کمترین را چاپ کنید.
🏋️ تمرین ۲: لیستی از کلمات بگیرید و آن را بدون کلمات تکراری بازگردانید (با حفظ ترتیب).
🏋️ تمرین ۳: با list comprehension، لیستی از مربع‌های اعداد فرد بین ۱ تا ۲۰ بسازید.
🏋️ تمرین ۴: دو لیست از نام و قیمت بگیرید و لیستی از تاپل‌های (نام، قیمت) بسازید که بر اساس قیمت مرتب باشد.

جمع‌بندی

  • لیست: مرتب، تغییرپذیر، با []
  • متدهای لیست: append، insert، remove، pop، sort
  • List Comprehension برای ساخت فشرده
  • کپی صحیح لیست (نه با =)
  • تاپل: مرتب، تغییرناپذیر، با ()
  • Tuple Unpacking – ابزار قدرتمند پایتون

نمایش سایت

رنگ سایت
حالت نمایش
اندازهٔ متن
خوانایی

این تنظیمات فقط روی مرورگر شما ذخیره می‌شود.