بی آکادمی
آموزش HTML
آموزش CSS
فلکس باکس
جاوااسکریپت
آموزش SQL
آموزش MySQL
آموزش PHP
آموزش لاراول
دانلود و نصب لینوکس
داکر دسکتاپ
VS Code
گیت و گیت هاب
آموزش پایتون
هوش مصنوعی
TypeScript
فروشگاه اینترنتی
اپلیکیشن موبایل
آموزش اکسل

آموزش جامع لیست‌ها (Lists) در پایتون


🎯 اهداف یادگیری

  • درک مفهوم لیست‌ها و کاربرد آنها در پایتون
  • شناخت روش‌های مختلف ایجاد و مقداردهی لیست‌ها
  • یادگیری دسترسی و تغییر عناصر لیست
  • آشنایی با متدهای پرکاربرد لیست‌ها
  • یادگیری لیست کامپرهنشن و عملیات‌های پیشرفته

📌 مقدمه‌ای بر لیست‌ها در پایتون

لیست‌ها یکی از پرکاربردترین ساختارهای داده در پایتون هستند که برای ذخیره مجموعه‌ای از آیتم‌ها به صورت ترتیبی استفاده می‌شوند. لیست‌ها تغییرپذیر (Mutable) هستند، یعنی می‌توان محتوای آنها را پس از ایجاد تغییر داد.


📌 ایجاد و مقداردهی لیست‌ها

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

python
# ایجاد لیست خالی
empty_list = []
empty_list2 = list()
# ایجاد لیست با مقادیر اولیه
numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]
# لیست با انواع مختلف داده
mixed_list = [1, "hello", True, 3.14]
# لیست تودرتو (Nested List)
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(numbers)
print(fruits)
print(mixed_list)
print(nested_list)

ویژگی‌های مهم لیست‌ها:

  • تغییرپذیر (Mutable): می‌توان عناصر را تغییر داد، اضافه یا حذف کرد
  • ترتیبی (Ordered): عناصر به ترتیب اضافه شدن ذخیره می‌شوند
  • پویا (Dynamic): اندازه لیست می‌تواند تغییر کند
  • قابل تکراری (Iterable): می‌توان روی عناصر آن حلقه زد
  • همگن یا ناهمگن: می‌تواند شامل انواع مختلف داده باشد

📌 دسترسی به عناصر لیست

برای دسترسی به عناصر لیست از اندیس (index) استفاده می‌شود. اندیس‌ها از صفر شروع می‌شوند:

python
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
# دسترسی به عناصر با اندیس مثبت
print(fruits[0]) # خروجی: apple
print(fruits[2]) # خروجی: cherry
# دسترسی به عناصر با اندیس منفی (شروع از انتها)
print(fruits[-1]) # خروجی: elderberry
print(fruits[-2]) # خروجی: date
# برش زدن لیست (Slicing)
print(fruits[1:4]) # خروجی: ['banana', 'cherry', 'date']
print(fruits[:3]) # خروجی: ['apple', 'banana', 'cherry']
print(fruits[2:]) # خروجی: ['cherry', 'date', 'elderberry']
print(fruits[::-1]) # خروجی: ['elderberry', 'date', 'cherry', 'banana', 'apple']

نکات مهم در دسترسی به لیست:

  • اندیس‌گذاری: اندیس اول همیشه 0 است
  • اندیس منفی: از انتهای لیست شروع به شمارش می‌کند
  • برش زدن: از الگوی [start:stop:step] پیروی می‌کند
  • خطای IndexError: اگر اندیس خارج از محدوده باشد رخ می‌دهد

📌 تغییر و به‌روزرسانی لیست

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

python
numbers = [1, 2, 3, 4, 5]
# تغییر یک عنصر
numbers[2] = 10
print(numbers) # خروجی: [1, 2, 10, 4, 5]
# تغییر چندین عنصر با برش زدن
numbers[1:3] = [20, 30]
print(numbers) # خروجی: [1, 20, 30, 4, 5]
# اضافه کردن عنصر به انتهای لیست
numbers.append(6)
print(numbers) # خروجی: [1, 20, 30, 4, 5, 6]
# درج عنصر در موقعیت خاص
numbers.insert(2, 25)
print(numbers) # خروجی: [1, 20, 25, 30, 4, 5, 6]

📌 متدهای پرکاربرد لیست

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

python
my_list = [3, 1, 4, 1, 5, 9, 2]
# اضافه کردن عنصر به انتها
my_list.append(6)
print(my_list) # [3, 1, 4, 1, 5, 9, 2, 6]
# حذف عنصر با مقدار مشخص
my_list.remove(1)
print(my_list) # [3, 4, 1, 5, 9, 2, 6]
# حذف عنصر با اندیس و بازگرداندن آن
popped = my_list.pop(2)
print("حذف شده:", popped) # حذف شده: 1
print(my_list) # [3, 4, 5, 9, 2, 6]
# پیدا کردن اندیس یک عنصر
index = my_list.index(5)
print("اندیس 5:", index) # اندیس 5: 2
# شمارش تعداد تکرار یک عنصر
count = my_list.count(9)
print("تعداد 9:", count) # تعداد 9: 1
# مرتب کردن لیست
my_list.sort()
print("مرتب شده:", my_list) # مرتب شده: [2, 3, 4, 5, 6, 9]
# معکوس کردن لیست
my_list.reverse()
print("معکوس شده:", my_list) # معکوس شده: [9, 6, 5, 4, 3, 2]
# پاک کردن تمام عناصر لیست
my_list.clear()
print("لیست خالی:", my_list) # لیست خالی: []

جدول متدهای مهم لیست:

متد توضیح مثال
append(x) اضافه کردن x به انتهای لیست list.append(5)
insert(i, x) درج x در موقعیت i list.insert(2, 10)
remove(x) حذف اولین occurrence از x list.remove(5)
pop([i]) حذف و بازگرداندن عنصر در موقعیت i list.pop(3)
clear() حذف تمام عناصر لیست list.clear()
index(x) بازگرداندن اندیس اولین occurrence از x list.index(10)
count(x) شمارش تعداد تکرار x در لیست list.count(5)
sort() مرتب کردن لیست list.sort()
reverse() معکوس کردن ترتیب عناصر لیست list.reverse()
copy() ایجاد یک کپی از لیست new_list = list.copy()

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

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

python
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# الحاق لیست‌ها
combined = list1 + list2
print(combined) # [1, 2, 3, 4, 5, 6]
# تکرار لیست
repeated = list1 * 3
print(repeated) # [1, 2, 3, 1, 2, 3, 1, 2, 3]
# بررسی وجود عنصر در لیست
print(2 in list1) # True
print(7 not in list1) # True
# پیدا کردن طول لیست
print(len(list1)) # 3
# پیدا کردن کوچکترین و بزرگترین مقدار
print(min(list1)) # 1
print(max(list1)) # 3
# جمع عناصر لیست (برای اعداد)
print(sum(list1)) # 6

📌 پیمایش لیست‌ها

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

python
fruits = ["apple", "banana", "cherry", "date"]
# پیمایش با حلقه for (مقدار)
for fruit in fruits:
print(fruit)
# پیمایش با حلقه for (اندیس و مقدار)
for index, fruit in enumerate(fruits):
print(index, fruit)
# پیمایش با حلقه while
i = 0
while i < len(fruits):
print(fruits[i])
i += 1
# پیمایش با List Comprehension
upper_fruits = [fruit.upper() for fruit in fruits]
print(upper_fruits) # ['APPLE', 'BANANA', 'CHERRY', 'DATE']

📌 List Comprehension

لیست کامپرهنشن یک روش فشرده و کارآمد برای ایجاد لیست‌های جدید بر اساس لیست‌های موجود است:

python
numbers = [1, 2, 3, 4, 5]
# ایجاد لیست جدید با مربع اعداد
squares = [x ** 2 for x in numbers]
print(squares) # [1, 4, 9, 16, 25]
# فیلتر کردن اعداد زوج
even_numbers = [x for x in numbers if x % 2 == 0]
print(even_numbers) # [2, 4]
# ایجاد لیست از رشته‌ها
words = ["hello", "world", "python"]
lengths = [len(word) for word in words]
print(lengths) # [5, 5, 6]
# ایجاد لیست از چندین حلقه
pairs = [(x, y) for x in [1, 2, 3] for y in [4, 5]]
print(pairs) # [(1, 4), (1, 5), (2, 4), (2, 5), (3, 4), (3, 5)]

مزایای List Comprehension:

  • خوانایی بیشتر: کد فشرده و قابل فهم‌تر
  • کارایی بهتر: سریع‌تر از حلقه‌های عادی است
  • انعطاف‌پذیری: امکان فیلتر کردن و تبدیل داده‌ها

📌 کپی کردن لیست‌ها

برای جلوگیری از تغییرات ناخواسته، باید با دقت لیست‌ها را کپی کنید:

python
original = [1, 2, 3]
# کپی سطحی (Shallow Copy) - روش نادرست
copy_wrong = original
copy_wrong[0] = 10
print("Original:", original) # Original: [10, 2, 3] (تغییر کرد!)
# کپی سطحی (Shallow Copy) - روش‌های صحیح
original = [1, 2, 3]
copy1 = original[:] # استفاده از slicing
copy2 = list(original) # استفاده از constructor
copy3 = original.copy() # استفاده از متد copy
copy1[0] = 10
print("Original:", original) # Original: [1, 2, 3] (تغییر نکرد)
print("Copy:", copy1) # Copy: [10, 2, 3]
# کپی عمیق (Deep Copy) برای لیست‌های تودرتو
import copy
nested_list = [1, [2, 3], 4]
deep_copy = copy.deepcopy(nested_list)
deep_copy[1][0] = 20
print("Original:", nested_list) # Original: [1, [2, 3], 4] (تغییر نکرد)
print("Deep Copy:", deep_copy) # Deep Copy: [1, [20, 3], 4]

📌 تمرین‌های عملی

حالا نوبت شماست! کدهای زیر را بررسی کنید و نتیجه را پیش‌بینی کنید:

python
# تمرین ۱
numbers = [1, 2, 3, 4, 5]
numbers[1:4] = [10, 20]
print(numbers)
# تمرین ۲
fruits = ["apple", "banana", "cherry"]
result = [f.upper() for f in fruits if "a" in f]
print(result)
# تمرین ۳
list1 = [1, 2, 3]
list2 = list1
list2.append(4)
print(list1)