لیست‌ها

اصلاح شده

2025-07-28

لیست یک دنباله است

برای کنارهم قرار دادن چندین داده با نوع مختلف، می‌توان از لیست استفاده کرد. یکی از راه‌های ایجاد لیست، بکاربردن براکت در تعریف آن است:

cheeses = ['Cheddar', 'Edam', 'Gouda']
numbers = [17, 123]
empty = []
print(cheeses, numbers, empty)
['Cheddar', 'Edam', 'Gouda'] [17, 123] []

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

multi_types_items = ['spam', 2.0, 5, [10, 20]]

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

لیست cheeses دارای 3 عنصر است. لیست numbers دو عنصر دارد و لیست multi_types_items شامل 4 عنصر می‌شود. چراکه لیست داخلی که شامل عناصر 10 و 20 هست، در لیست اصلی، به عنوان یک عنصر و یا داده درنظرگرفته می‌شود.

برای تغییر مقادیر موجود در لیست، می‌بایست بتوانیم به هر داده دسترسی داشته باشیم، به این منظور از اندیس برای آدرس‌دهی استفاده می‌کنیم:

numbers = [17, 123]
numbers[1] = 5
print(numbers)
[17, 5]

و یا برای اینکه بدانیم داده مورد نظر ما در لیست قرار گرفته یا خیر، می‌توان از این روش استفاده کرد:

cheeses = ['Cheddar', 'Edam', 'Gouda']
'Edam' in cheeses
True

و یا:

cheeses = ['Cheddar', 'Edam', 'Gouda']
'Brie' in cheeses
False

پیمایش در لیست

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

for cheese in cheeses:
    print(cheese)
Cheddar
Edam
Gouda

این کار بسیار ساده بود. چرا که ما تمام لیست را یکی یکی پیمایش کردیم و آن را در خروجی چاپ کردیم. اما اگر نیاز داشته باشیم که در حین پیمایش، داده‌ای از لیست را تغییر دهیم، چه روشی را باید درپیش بگیریم؟

for i in range(len(numbers)):
    numbers[i] = numbers[i] * 2

کارکردن با عناصر لیست

در قطعه کد زیر، به ترتیب با استفاده از عملگرهای + و * آشنا می‌شویم و سپس نحوه برش‌های مختلف لیست را یادمی‌گیریم:

a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c)
[1, 2, 3, 4, 5, 6]
[1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
t = ['a', 'b', 'c', 'd', 'e', 'f']
t[1:3]
['b', 'c']
t[:4]
['a', 'b', 'c', 'd']
t[3:]
['d', 'e', 'f']

متدهای لیست

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

t = ['a', 'b', 'c']
t.append('d')
print(t)
['a', 'b', 'c', 'd']

همچنین متد extend() یک لیست را به عنوان آرگومان ورودی دریافت می‌کند و آن را به انتهای لیست معرفی شده، اضافه می‌کند:

t1 = ['a', 'b', 'c']
t2 = ['d', 'e']
t1.extend(t2)
print(t1)
['a', 'b', 'c', 'd', 'e']

برای مرتب کردن عناصر یک لیست، متد sort() در اختیار ماست:

t = ['d', 'c', 'e', 'b', 'a']
t.sort()
print(t)
['a', 'b', 'c', 'd', 'e']

اگر چنانچه خواسته باشیم عنصری را از داخل یک لیست حذف کنیم، با دانستن اندیس موقعیت آن عنصر، می‌توانیم از متد ‘pop(i)’ استفاده کنیم:

t = ['a', 'b', 'c']
x = t.pop(1)
print(t)
['a', 'c']
print(x)
b

اگر در استفاده از دستور pop() اندیس استفاده نشود، این متد، آخرین عنصر آرایه را حذف خواهد کرد.

به کد زیر و نتیجه اجرای آن دقت کنید:

t = ['a', 'b', 'c']
del t[1]
print(t)
['a', 'c']

به نظر شما تفاوت استفاده از متدهای pop(i) و del list_name[i] در چیست؟

بله، درست است که هر دو باعث حذف یک عنصر از لیست می‌شوند اما در استفاده از متد pop(i) عنصر حذف شده در اختیار ما خواهد بود. به این معنی که خروجی این متد، نمایانگر مقدار عنصر حذف شده است. اما در استفاده از دستور del list_name[i] عنصری که حذف شده دیگر در دسترس ما نخواهد بود.

حال به این سوال فکر کنید که اگر اندیس عنصر موردنظر برای حذف کردن را ندانیم، از چه روشی می‌توانیم آن عنصر خاص را حذف کنیم؟ درواقع پایتون برای این منظور متد remove(item_value) را پیشنهاد می‌دهد که با ارسال مقدار عنصر موردنظر به عنوان آرگومان ورودی به این متد، می‌توانیم آن را از لیست حذف کنیم:

t = ['a', 'b', 'c']
t.remove('b')
print(t)
['a', 'c']

و یا برای حذف بیش از یک مقدار، با دانستن اندیس آن‌ها می‌توان از روش زیر استفاده کرد:

t = ['a', 'b', 'c', 'd', 'e', 'f']
del t[1:5]
print(t)
['a', 'f']

برخی توابع مهم مربوط به لیست

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

nums = [3, 41, 12, 9, 74, 15]
print(len(nums))
6
print(max(nums))
74
print(min(nums))
3
print(sum(nums))
154
print(sum(nums)/len(nums))
25.666666666666668

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

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

s = 'spam'
t = list(s)
print(t)
['s', 'p', 'a', 'm']

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

s = 'pining for the fjords'
t = s.split()
print(t)
['pining', 'for', 'the', 'fjords']

و یا مثالی دیگر که در آن با کاربرد توابع split(delimiter) و join(list_name) آشنا می‌شویم:

s = 'spam-spam-spam'
delimiter = '-'
s.split(delimiter)
['spam', 'spam', 'spam']
t = ['pining', 'for', 'the', 'fjords']
delimiter = ' '
delimiter.join(t)
'pining for the fjords'