در همهی زبانهای برنامه نویسی، ساختاری برای دادههای دنبالهای وجود دارد. این دادهها در زبانهای مختلف، معمولا به عنوان آرایه شناخته میشوند؛ اما در پایتون نوع دادهای به نام آرایه وجود ندارد. با اینحال نوع داده لیست (list)، دقیقا کار آرایهها را در پایتون انجام میدهد — البته برای پروژههای پیشرفتهتر، لازم است از کتابخانه نامپای استفاده کنید. در این بخش از آموزش پایتون، نحوهی کار با لیست در پایتون را خواهید آموخت.
به طور کلی، چهار نوع دادهی مجموعهای (چینشی از چند متغیر) در زبان برنامه نویسی پایتون وجود دارد:
- List در پایتون، مجموعهای است که دارای ترتیب، قابل تغییر و مجاز به داشتن اعضای تکراری میباشد.
- Tuple مجموعهای است که دارای ترتیب، غیر قابل تغییر و مجاز به داشتن اعضای تکراری میباشد.
- Set مجموعهای است که بدون ترتیب، بدون شمارهگذاری (index)، و فاقد اعضای تکراری میباشد.
- Dictionary مجموعهای است که بدون ترتیب، قابل تغییر و شمارهگذاری و فاقد اعضای تکراری میباشد.
لیست در پایتون
لیست یک مجموعهی دارای ترتیب و قابل تغییر است. در پایتون، لیستها با علامت براکت [] نوشته میشوند.
مثال #۱: چند مثال از ساخت لیستهای مختلف
1 2 3 4 5 |
companies = ["Apple", "Microsoft", "Oracle", "Adobe"] foundation = [1976, 1975, 1977, 1982] net_income = [55.26, 44.3, 11.08, 2.95] info = [companies, foundation, net_income] print(companies, foundation, net_income, info, sep='\n') |
خروجی #۱:
1 2 3 4 |
['Apple', 'Microsoft', 'Oracle', 'Adobe'] [1976, 1975, 1977, 1982] [55.26, 44.3, 11.08, 2.95] [['Apple', 'Microsoft', 'Oracle', 'Adobe'], [1976, 1975, 1977, 1982], [55.26, 44.3, 11.08, 2.95]] |
نکتهی قابل توجه در مثال بالا این است که عناصر لیستها میتوانند هر نوع دادهای را (و به هر تعداد) در خود بگنجانند؛ حتی لیستهای دیگر را! (شاید برایتان جالب باشد که بدانید این یکی از روشهای ساخت دیتافریم در علم داده (Data Science) میباشد!)
مثال #۲:
1 2 |
company = ["Google", "Larry Page & Sergey Brin", 1998, 34.34] print("{company} was founded in {year} by {founder} and has a net income of {income} billion USD.".format(company=company[0], founder=company[1], year=company[2], income=company[3])) |
خروجی #۲:
1 |
Google was founded in 1998 by Larry Page & Sergey Brin and has a net income of 34.34 billion USD. |
همانطور که مشاهده میکنید، میتوان در یک لیست چندین نوع داده از انواع متفاوت را ( int float string و …) بدون هیچ مشکلی به کار برد.
دسترسی به اعضای لیست در پایتون
همانند رشتهها، به هر کدام از عناصر یک لیست در پایتون، عدد خاصی نسبت داده میشود. به این عدد «index» گفته میشود. توضیحات مفصلتر در مورد indexها را میتوانید در مقالهی رشته در پایتون بخوانید.
در مثال زیر، به دومین عضو لیست دسترسی پیدا میکنیم.
مثال #۳:
1 2 |
thislist = ["apple", "banana", "cherry"] print(thislist[1]) |
خروجی #۳:
1 |
banana |
شروع شمارش از انتها
همچنین میتوان از انتهای لیست نیز شروع به شمارش نمود. شمارندهی -۱ آخرین عضو، شمارندهی -۲ عضو یکی مانده به آخر و به همین صورت تا اولین عضو پیش میرود.
مثال #۴:
1 2 |
backwards = [3, 2, 1] print(backwards[-1], backwards[-2], backwards[-3]) |
خروجی #۴:
1 |
1 2 3 |
تعیین نقطهی شروع و پایان اعضای لیست
علاوه بر روشهای قبل، میتوانید مانند رشتهها، بازهای از شمارندهها را با تعیین نقطهی شروع و پایان شمارهگذاری، مشخص کنید. وقتی از این روش استفاده میکنید، مقدار خروجی یک لیست جدید با اعضای مشخص شده خواهد بود.
مثال #۵: میخواهیم عناصر دوم تا چهارم را چاپ نماییم
1 2 |
superheroes = ['Batman', 'Flash', 'Guido van Rossum', 'Superman', 'Aquaman'] print(superheroes[1:4]) |
خروجی #۵:
1 |
['Flash', 'Guido van Rossum', 'Superman'] |
در این روش، با قرار ندادن مقدار اولیه، بازه از عضو اول شروع میشود و با قرار ندادن مقدار انتهایی، بازه به عضو آخر ختم میشود. در مثالهای زیر این نکته را بهتر متوجه خواهید شد.
مثال #۶:
1 2 |
villains = ['Joker', 'Bane', 'Steve Jobs', 'Penguin', 'Riddler'] print(villains[:3]) |
خروجی #۶:
1 |
['Joker', 'Bane', 'Steve Jobs'] |
1 2 |
shield = ['Nick Fury', 'Maria Hill', 'Sharon Carter', 'Dennis Ritchie', 'Steve Rogers'] print(shield[2:]) |
1 |
['Sharon Carter', 'Dennis Ritchie', 'Steve Rogers'] |
مثال #۸:
1 2 |
guardians = ['Groot', 'Star-Lord', 'Gamora', 'Rocket'] print(guardians[-4:-1]) |
خروجی #۸:
1 |
['Groot', 'Star-Lord', 'Gamora'] |
استفاده از حلقهی for در لیست
با استفاده از حلقهی for نیز میتوان به اعضای درون لیست دسترسی پیدا کرد. در آینده با حلقهی for در پایتون بیشتر آشنا خواهید شد.
مثال #۹: یکی یکی همهی اعضای لیست را نمایش بده:
1 2 3 4 |
friends = ['Chandler', 'Monica', 'Joey', 'Phoebe', 'Ross', 'Rachel'] for character in friends[:4]: print("{} is very loveable!".format(character)) |
خروجی #۹:
1 2 3 4 |
Chandler is very loveable! Monica is very loveable! Joey is very loveable! Phoebe is very loveable! |
تغییر مقدار عضوهای لیست در پایتون
برای تغییر مقدار یک عضو خاص، مطابق مثال به شمارندهی آن عضو اشاره کنید.
مثال #۱۰: تغییر چهارمین عضو لیست
1 2 3 4 5 |
friends = ['Chandler', 'Monica', 'Joey', 'Phoebe', 'Gunther', 'Rachel'] print(friends[4]) friends[4] = 'Ross' print(friends[4]) |
خروجی #۱۰:
1 2 |
Gunther Ross |
بررسی وجود یک عضو در لیست
برای بررسی وجود داشتن یک عضو خاص در لیست، از کلیدواژهی in استفاده کنید.
مثال #۱۱:
1 2 3 4 |
friends = ['Chandler', 'Monica', 'Joey', 'Phoebe', 'Ross', 'Rachel'] print('Gunther' in friends) print('Ross' in friends) |
خروجی #۱۱:
1 2 |
False True |
همان طور که میبینید، خروجی این مثال به صورت True و False است؛ به عبارت دیگر، دادهی خروجی از نوع bool است.
بررسی طول لیست در پایتون
برای بررسی طول یا تعداد اعضای لیست، از تابع ()len استفاده کنید.
مثال #۱۲:
1 2 |
communists = ['China', 'Cuba', 'Laos'] print(len(communists)) |
خروجی #۱۲:
1 |
3 |
افزودن عضو جدید به لیست
برای افزودن عضو به انتهای لیست از متد ()append استفاده کنید.
مثال #۱۳:
1 2 3 |
communists = ['China', 'Cuba', 'Laos'] communists.append('R.U.S.S.') print(communists) |
خروجی #۱۳:
1 |
['China', 'Cuba', 'Laos', 'R.U.S.S.'] |
همچنین ممکن است دوست داشته باشید که در یک مکان خاص عضو جدید را اضافه کنید؛ برای این کار نیز کافیست از متد ()insert استفاده کنید.
مثال #۱۴:
1 2 3 |
alphabet = ['a', 'c', 'd'] alphabet.insert(1, 'b') print(alphabet) |
خروجی #۱۴:
1 |
['a', 'b', 'c', 'd'] |
حذف عضو از لیست در پایتون
روشهای مختلفی برای حذف عضو از لیست در پایتون وجود دارد. در ادامه هر کدام از این روشها را معرفی میکنیم و برای آنها مثالی میزنیم.
حذف عضو از لیست با متد ()remove
با استفاده از متد ()remove میتوانید یک عضو مشخص را حذف کنید.
مثال #۱۵:
1 2 3 |
fruits = ['apple', 'banana', 'carrot'] fruits.remove('carrot') # because carrot isn't a fruit! print(fruits) |
خروجی #۱۵:
1 |
['apple', 'banana'] |
حذف عضو از لیست با متد ()pop
با قرار دادن ایندکس مورد نظر در ورودی متد ()pop، آن داده از لیست حذف میشود و به خروجی داده میشود. همچنین اگر ورودی را خالی رها کنید، این عمل روی آخرین دادهی لیست انجام میشود.
مثال #۱۶:
1 2 3 4 |
ml_libraries = ['keras', 'tensorflow', 'sklearn', 'scipy', 'folium'] library = ml_libraries.pop() print("{} isn't a machine learning library, these are:".format(library)) print(ml_libraries) |
خروجی #۱۶:
1 2 |
folium isn't a machine learning library, these are: ['keras', 'tensorflow', 'sklearn', 'scipy'] |
حذف عضو از لیست با کلیدواژه del
با استفاده از کلیدواژهی del، میتوان یک عضو مشخص از لیست، و یا کل لیست را به طور کامل حذف نمود. در مثال زیر، هر دو مورد را خواهید دید.
مثال #۱۷:
1 2 3 4 5 |
fake_professors = ['Umbridge', 'Crouch', 'Quirell', 'Lockhart'] del fake_professors[0] print(fake_professors) del fake_professors print(fake_professors) # raises NameError |
خروجی #۱۷:
1 2 3 4 5 6 7 8 |
Output: ['Crouch', 'Quirell', 'Lockhart'] Runtime Errors: Traceback (most recent call last): File "/home/bc1c927f007420be3de9c1ecc332de98.py", line 5, in <module> print(fake_professors) # raises NameError NameError: name 'fake_professors' is not defined |
همانطور که گفتیم، کلمهی del یک کلیدواژه در زبان پایتون است و مختص به لیستها نیست؛ به این معنا که میتوان با استفاده از آن هر نوع دادهای را حذف کرد.
حذف عضو از لیست با متد ()clear
متد ()clear همهی اعضای درون لیست را حذف میکند؛ اما متغیر لیست حذف نمیشود.
مثال #۱۸:
1 2 3 |
colors = ['violet', 'cyan', 'magenta'] colors.clear() print(colors) # empty list, will NOT raise error |
خروجی #۱۸:
1 |
[] |
کپی کردن یک لیست در پایتون
ممکن است تصور کنید که میتوان با نوشتن عبارت list2 = list1 یک لیست را در یک متغیر جدید کپی کرد؛ اما کار به این سادگی هم نیست. زیرا در این صورت list2 فقط یک مرجع نسبت به list1 خواهد بود؛ یعنی تغییرات list1 به صورت خودکار بر list2 نیز اعمال میشود.
چند روش برای کپی کردن لیست در پایتون وجود دارد. یکی از روشها، استفاده از متد ()copy است.
برای درک بهتر تفاوت بین متد ()copy و تشکیل لیستی جدید از طریق عملگر =، به مثال زیر دقت کنید:
مثال #۱۹:
1 2 3 4 5 |
old_house = ['living room', 'bathroom', 'kitchen', 'basement'] new_house = old_house new_house.remove('kitchen') print('new_house = {}'.format(new_house)) print('old_house = {}'.format(old_house)) |
خروجی #۱۹:
1 2 |
new_house = ['living room', 'bathroom', 'basement'] old_house = ['living room', 'bathroom', 'basement'] |
همانطور که مشاهده میکنید، تغییرات اعمال شده بر روی متغیر جدید، بر متغیر قدیمی نیز اعمال شدهاست. اما چرا؟ برای پاسخ دادن به این سوال باید وارد زیرساختهای زبان پایتون و مبحث اشارهگرها شویم که فعلا (و احتمالا هیچ وقت) لازم نیست نگران آنها باشید. کافیست بدانید که برای تولید یک لیست جدید بدون وابستگی آن به لیست قدیمی، از متد ()copy استفاده مینماییم:
مثال #۲۰:
1 2 3 4 5 6 7 8 |
old_house = ['living room', 'bathroom', 'kitchen', 'basement'] new_house = old_house new_house.remove('kitchen') very_new_house = new_house.copy() very_new_house.append('fancy kitchen') print('very_new_house = {}'.format(very_new_house)) print('new_house = {}'.format(new_house)) |
خروجی #۲۰:
1 2 |
very_new_house = ['living room', 'bathroom', 'basement', 'fancy kitchen'] new_house = ['living room', 'bathroom', 'basement'] |
مشکل رفع شد!
دو روش دیگر نیز برای تولید یک لیست جدید از لیستی قدیمی، بدون ایجاد وابستگی، وجود دارد. یکی با استفاده از متد ()list و دیگری به روش انتخاب اعضای لیست. در مثال زیر، طرز عملکرد هر کدام را خواهید دید.
مثال #۲۱:
1 2 3 4 5 6 7 8 9 10 |
capitals = ['tehran', 'berlin', 'paris', 'moscow'] capitals_cp = capitals[:] # Selects all of the contents in capitals, and copies them into capitals_cp capitals_cp2 = list(capitals) print('capitals_cp = {}'.format(capitals_cp)) print(capitals_cp is capitals) print('capitals_cp2 = {}'.format(capitals_cp2)) print(capitals_cp2 is capitals) |
خروجی #۲۱:
1 2 3 4 |
capitals_cp = ['tehran', 'berlin', 'paris', 'moscow'] False capitals_cp2 = ['tehran', 'berlin', 'paris', 'moscow'] False |
اتصال دو لیست در پایتون
چندین روش برای اتصال یا چسباندن دو یا چند لیست در پایتون وجود دارد. یکی از راحتترین راهها، استفاده از عملگر + است.
مثال #۲۲:
1 2 3 4 |
east_germany = ['Berlin', 'Dresden', 'Leipzig'] west_germany = ['Frakfurt', 'Bonn', 'Essen'] germany = east_germany + west_germany print(germany) |
خروجی #۲۲:
1 |
['Berlin', 'Dresden', 'Leipzig', 'Frakfurt', 'Bonn', 'Essen'] |
میتوانید با استفاده از یک حلقه و متد ()append، اعضای یک لیست را تکتک به لیست دیگر اضافه نمایید؛ اما از آنجایی که ما برنامهنویس هستیم و برنامهنویسها تنبلند، از متد بسیار کوتاهتر و موثرتر ()extend استفاده مینماییم.
مثال #۲۳:
1 2 3 4 |
starwars_characters = ['Han', 'Darth', 'Leia', 'Luke'] new_characters = ['Rey', 'Finn', 'Kylo'] starwars_characters.extend(new_characters) print(starwars_characters) |
خروجی #۲۳:
1 |
['Han', 'Darth', 'Leia', 'Luke', 'Rey', 'Finn', 'Kylo'] |
همانطور که مشاهده میکنید، در این روش، برخلاف روش قبل، تغییرات بر روی خود لیست اعمال میشوند.
ساخت لیست با متد list
علاوه بر روش معمول و با استفاده از براکتها، میتوان از متد سازندهی ()list برای ساخت یک لیست جدید استفاده کرد.
مثال #۲۴:
1 2 |
langs = list(('en', 'fa', 'jp')) # note the double round-brackets print(langs) |
خروجی #۲۴:
1 |
['en', 'fa', 'jp'] |
خلاصهای از متدهای لیست در پایتون
پایتون چندین متد پیشفرض برای لیستها دارد که میتوانید از آنها استفاده کنید:
متد | توضیحات متد |
append() | افزودن عضو به انتهای لیست |
clear() | حذف همهی اعضای لیست |
copy() | برگرداندن یک کپی از لیست |
count() | تعداد اعضایی را که یک مقدار خاص دارند برمیگرداند |
extend() | افزودن اعضای یک لیست (یا هر مجموعهای با اعضای تکراری) به انتهای لیست فعلی |
index() | ایندکس اولین عضو با یک مقدار مشخص را بر میگرداند |
insert() | یک عضو در ایندکس مشخص اضافه میکند |
pop() | یک عضو با ایندکس مشخص را حذف میکند |
remove() | یک عضو با مقدار مشخص را حذف میکند |
reverse() | ترتیب لیست را برعکس میکند |
sort() | لیست را طبق ترتیب الفبا مرتب میکند |