لیست و تاپل
لیست و تاپل دو ساختار داده مرتب در پایتون هستند که چندین مقدار را در یک متغیر ذخیره میکنند. لیست تغییرپذیر و تاپل تغییرناپذیر است.
لیست و تاپل دو ساختار داده مرتب در پایتون هستند که چندین مقدار را در یک متغیر ذخیره میکنند. لیست تغییرپذیر و تاپل تغییرناپذیر است.
لیست (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 – ابزار قدرتمند پایتون