تور آموزشی

لیست در پایتون

لیست List

لیست‌ها مشابه با آرایه‌ها در زبان‌های برنامه‌نویسی دیگر هستند. از لیست‌ها برای ذخیره تعدادی داده در یک متغیر استفاده می‌شود. غیر از لیست از چندتایی (Tuple)، مجموعه (Set) و دیکشنری (Dictionary) نیز برای این کار استفاده می‌شود. البته هر کدام ویژگی و کاربرد مخصوص به خودشان را دارند.

یک لیست با کاراکتر براکت [] ساخته می‌شود و آیتم‌های مختلف آن با کاما (,) از هم جدا می‌شوند.

مثال:

list1 = [11, 22, 33]
list2 = [‘a’, ‘ab’, ‘abc’, ‘abcd’]
list3 = [None, ‘salam’, 3.14, True]
list4 = [[11, 22], [‘s’, ‘a’, ‘l’, ‘a’, ‘m’]]

مثال چهارم یک لیست با طول 2 است که هر عضو خودش یک لیست است.

اندیس اعضای لیست از صفر شروع می‌شود. همچنین اندیس 1- به عضو آخر لیست اشاره می‌کند. با علامت  + می‌توان دو لیست را به هم اضافه کرد.

در مثال قبل:

print(list1[0])
print(list1[-1])
print(list1 + list2)
print(list3[1:3])
print(list4[1][2])
print(list4[1][-4:-1])

خروجی:

11
33
[1, 2, 3, ‘a’, ‘ab’, ‘abc’, ‘abcd’]
[‘salam’, 3.14]
‘l’
['a', 'l', 'a']

یک لیست می‌تواند عنصر تکراری داشته باشد. همچنین عناصر لیست می‌توانند تغییر کنند. ویژگی دیگر لیست‌ها این است که مرتب هستند. یعنی ترتیب قرارگیری اعضا مهم است و با اندیس می‌توان به اعضا دسترسی داشت.

سایر انواع داده در پایتون که مشابه با آرایه‌ها هستند فقط بعضی از این ویژگی‌ها را دارند. همان‌طوری که گفته شد چهار نوع داده: لیست، چندتایی، مجموعه و دیکشنری نقشی مشابه با آرایه‌ها را در پایتون بازی می‌کنند. در جدول زیر به طور خلاصه به ویژگی هر کدام اشاره شده است.

نوع داده

دارای ترتیب 

عضو تکراری

قابل تغییر

لیست

بله

بله

بله

چندتایی

بله

بله

خیر

دیکشنری

بله

خیر

بله

مجموعه

خیر

خیر

خیر*

* درباره مجموعه باید به این نکته دقت کرد که عناصر یک مجموعه قابل ویرایش نیستند ولی می‌توان به یک مجموعه عنصر اضافه کرد و یا از آن حذف کرد.

برای بررسی اینکه آیا یک عنصر عضو لیست هست یا نه از عملگر in استفاده می‌کنیم.

مثال:

fruits = [‘apple’, ‘banana’, ‘orange’]
vegetables = [‘onion’, ‘cabbage’, ‘celery’, ‘garlic’]
if ‘orange’ in fruits:
    print(“orange is one of the fruits”)
elif ‘orange’ in vegetables:
    print(“orange is one of the vegetables“)
else:
    print(“ :-( “)

خروجی:

orange is one of the fruits

برای کپی کردن یک لیست از متد copy استفاده می‌کنیم. با روش‌هایی مانند list2 = list1 نمی‌توانیم یک لیست را در لیست دیگر کپی کنیم. این کار خطرناکی است. چون در این حالت list2 صرفا یک ارجاع به لیست اول است. درواقع هر دو لیست به یک نقطه از حافظه اشاره می‌کنند و با ویرایش یک لیست دیگری نیز تغییر خواهد کرد.

مثال:

x = [1, 2, 3]
y = x
z = x.copy()
x.append(4)
print(y)
print(z)

خروجی:

[1, 2, 3, 4]
[1, 2, 3]

درج و ویرایش عناصر لیست:

مقادیر لیست را با دستوری مانند my_list[i] = new_value می‌توان تغییر داد.

مثال:

list1[0] = 44
print(list1)

خروجی:

[44, 22, 33]

در همین مثال با دستور append می‌توان به انتهای یک لیست مقدار اضافه کرد.

مثال:

list1.append(55)
print(list1)

خروجی:

[44, 22, 33, 55]

می‌توان به صورت همزمان چند عنصر را در یک لیست ویرایش کرد یا به آن اضافه کرد:

مثال:

x = [1, 2, 3, 4]
y = [1, 2, 3, 4]
z = [1, 2, 3, 4]
x[1:3] = [5, 6]
y[1:3] = [5, 6, 7]
z[1:3] = [5]
print(x)
print(y)
print(z)

خروجی:

[1, 5, 6, 4]
[1, 5, 6, 7, 4]
[1, 5, 4]

در مورد دوم تعداد عناصر بیشتر و در مورد آخر تعداد عناصر کمتر به اندیس‌های مشخص شده تخصیص داده شد.

راه دیگر درج عنصر در لیست استفاده از متد insert است. با این متد می‌توان یک داده را در اندیس مشخص از لیست درج کرد.

مثال:

x = [11, 22, 33, 44]
x.insert(1, 12)
print(x)

خروجی:

[11, 12, 22, 33, 44]

با استفاده از متد extend می‌توان یک لیست را به یک لیست دیگر اضافه کرد.

مثال:

cars = [‘BMW’, ‘Benz’, ‘Ford’]
sports = [‘Wrestling’, ‘Judo’]
cars.extend(sports)
print(cars)

خروجی:

[‘BMW’, ‘Benz’, ‘Ford’, ‘Wrestling’, ‘Judo’]

اعضای لیست sports به لیست cars اضافه شده‌اند.

البته با متد extend هر مجموعه قابل پیمایشی (iterable) را (مثلا: چندتایی، مجموعه، دیکشنری و ...) را می‌توان به یک لیست اضافه کرد.

مثال:

cars = [‘BMW’, ‘Benz’, ‘Ford’]
sports = (‘Wrestling’, ‘Judo’)
fruits = {‘orange’, ‘apple’}
phones = {“samsung”: “A20”, “huawei”: “y5”}
cars.extend(sprots)
cars.extend(fruits)
cars.extend(phones)

خروجی:

[‘BMW’, ‘Benz’, ‘Ford’, ‘Wrestling’, ‘Judo’, ‘orange’, ‘apple’, ‘samsung’, ‘huawei’]

البته برای دیکشنری فقط کلیدها اضافه می‌شوند. برای اینکه مقادیر اضافه شوند باید بعد از نام دیکشنری از متد values استفاده کنیم.

مثال:

cars.extend(phones.values())

خروجی:

[‘BMW’, ‘Benz’, ‘Ford’, ‘Wrestling’, ‘Judo’, ‘orange’, ‘apple’, ‘samsung’, ‘huawei’, ‘A20’, ‘y5’]

حذف عنصر از لیست

با استفاده از متد remove می‌توان اعضای یک لیست را حذف کرد.

مثال:

x = [11, 21, 31]
x.remove(21)
print(x)

خروجی:

[11, 31]

با متد pop می‌توانیم عضو با اندیس خاص را حذف کنیم.

مثال:

y = [“salam”, 10, None]
y.pop(1)
print(y)

خروجی:

[‘salam’, None]

دقت شود متد remove هیچ خروجی ندارد اما متد pop علاوه بر حذف کردن، همان عضو حذف شده را به عنوان خروجی برمی‌گرداند. درواقع در مثال بالا خروجی دستور pop، مقدار 10 است. در صورتی که در متد pop اندیس را مشخص نکنیم، آخرین عنصر لیست حذف می‌شود.

مثال:

x = [1, 2, 3]
x.pop()
print(x)

خروجی:

[1, 2]

البته با کلمه کلیدی del نیز می‌توانیم یک عضو با اندیس مشخص را حذف کنیم.

مثال:

x = [‘strawberry’, ‘blueberry’, ‘raspberry’]
del x[0]
print(x)

خروجی:

[‘blueberry’, ‘raspberry’]

در صورتی که اندیس را مشخص نکنیم کلمه کلیدی del کل لیست را حذف می‌کند.

مثال:

x = [1, 2, 3]
del x
print(x)

خروجی:

NameError: name 'x' is not defined

با متد clear می‌توانیم همه اعضای لیست را حذف کنیم. در این حالت متغیر حذف نمی‌شود. بلکه به یک لیست خالی تبدیل می‌شود.

مثال:

x = [1, 2]
x.clear()
print(x)

خروجی:

[]

پیمایش لیست (حلقه‌های تکرار)

با حلقه for می‌توان به تمام عناصر یک لیست دسترسی داشت. این موضوع یکی از کارهایی است که در موارد متعدد برای یک برنامه‌نویس رخ می‌دهد.

مثال:

x = [‘strawberry’, ‘blueberry’, ‘raspberry’]
for item in x:
    print(item)

خروجی:

strawberry
blueberry
raspberry

همین لیست را می‌توان از طریق اندیس نیز پیمایش کرد. این کار را با استفاده از توابع range() و len() انجام می‌دهیم.

مثال:

for i in range(len(x)):
    print(x[i])

همین کار را با حلقه while نیز می‌توان انجام داد.

مثال:

i = 0
while i < len(x):
    print(x[i])
    i += 1

یک لیست را می‌توان به صورت خلاصه‌تر و فقط در یک خط پیمایش کرد.

مثال:

[print(item) for item in x]

خروجی:

strawberry
blueberry
raspberry
[None, None, None]

دلیل مشاهده لیست در خط آخر این است که زمانی که به صورت خلاصه پیمایش می‌کنیم پایتون به ما یک لیست جدید برمی‌گرداند. در اینجا چون ما این لیست را مقداردهی نکرده‌ایم و صرفا عناصر لیست اصلی را چاپ کردیم خود پایتون به جای هر عنصر در لیست جدید None قرار داده است.

مثال:

numbers = [1, 2, 3, 4]
squares = [x*x for x in numbers]
print(squares)

خروجی:

[1, 4, 9, 16]

می‌توان دستورات شرطی را به پیمایش خلاصه یک لیست در پایتون اضافه کرد و حالت کلی‌تری بدست آورد.

مثال:

numbers = [1, 2, 3, 4]
squares = [x*x for x in numbers if x%2 == 0]
print(squares)

خروجی:

[4, 16]

درواقع شرطی که به انتهای دستور اضافه شده است مانند یک فیلتر عمل می‌کند و باعث می‌شود فقط عناصری از لیست که در شرط صدق می‌کنند (دارای مقدار ارزشی True هستند) در خودشان ضرب شوند و وارد لیست جدید شوند.

مرتب سازی لیست در پایتون

با کمک متد sort می‌توان لیست‌هایی که عناصر آنها عددی یا الفبایی است (alphnumeric) را مرتب کرد. این مرتب‌سازی به صورت پیش‌فرض صعودی است. همچنین برای مرتب کردن رشته‌های الفبایی نسبت به حروف کوچک و بزرگ حساس (Case Sensitive) است. به این معنی که ابتدا همه کلماتی که حرف اول آنها بزرگ است مرتب می‌کند و بعد از آن به سراغ کلمات با حروف ابتدایی کوچک می‌رود.

متد sort مستقیما خود لیست را تغییر می‌دهد.

مثال:

x = [‘strawberry’, ‘blueberry’, ‘raspberry’]
x.sort()
print(x)

خروجی:

[‘blueberry’, ‘raspberry’, ‘strawberry’]

مثال:

x = [7, -3, 4.5, 1, 0]
x.sort()
print(x)

خروجی:

[-3, 0, 1, 4.5, 7]

مرتب‌سازی لیست را می‌توان با استفاده از کلمه کلیدی reverse نزولی کرد.

مثال:

x = [7, -3, 4.5, 1, 0]
x.sort(reverse = True)
print(x)

خروجی:

[7, 4.5, 1, 0, -3]

به سادگی می‌توانیم حساسیت مرتب‌سازی به حروف بزرگ و کوچک را از بین ببریم.

مثال:

x = [‘alpha’, ‘Beta’, ‘gamma’]
x.sort(key = str.lower)
print(x)

خروجی:

[‘alpha’, ‘Beta’, ‘gamma’]

در صورتی که بخواهیم بدون توجه به ترتیب حروف الفبا یا اعداد یک لیست را برعکس کرد از متد reverse استفاده می‌کنیم.

مثال:

x = [‘alpha’, ‘Beta’, ‘gamma’]
x.reverse()
print(x)

خروجی:

[‘gamma’, ‘Beta’, ‘alpha’]