لیست در پایتون
در تمامی زبانهای برنامهنویسی، به ساختارهای دادهی دنبالهای نیاز خواهیم داشت. یکی از پایهای ترینِ آن ها آرایه است، که در زبانهای مختلف نحوه پیادهسازی و استفاده از آنها متفاوت است. در این سری مقالهها قرار است که درباره انواع ساختارهای دادهای دنبالهای در پایتون و نحوه پیادهسازی و استفاده از آنها گفته شود. در پایتون این قابلیت وجود دارد که ساختارهای دادهای دنبالهای را برش داد (slice)، به آن اضافه کرد (add)، آن را ضرب کرد (multiply) و آن را چک کرد که آیا مقدارِ خاصی در آن وجود دارد یا خیر. (در این مقاله از نسخه پایتون ۳ استفاده شده است.)
لیست List
لیست، ساختار دادهای همه کاره در پایتون است و همانند آرایه میباشد. برای تعریف کردن لیست از کروشه [] استفاده میکنیم. تمام مقادیر بین کروشهها با comma از هم جدا میشوند. این را در نظر داشته باشید، مقادیری که در لیست وارد میکنید، میتواند از هر نوعی باشد.
برای مثال، عبارت زیر لیستی درست میکند که موضوعات سایت ZeroToHero را در خود دارد:
ZeroToHero_Topics = ["python" , "web" , "academic", "java", "android", "linux"]
و یا در لیست زیر اسم فرد، سن، دروسِ دانشگاهی و معدل وجود دارد:
person = ['John', 19, ['DB', 'AP'], 14.5]
حتی میتوان لیست را در داخل لیست پایتون گذاشت:
list_in_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
دسترسی به مقادیرِ لیست
برای دسترسی به مقادیر در یک لیست از اسم لیست به همراه شماره index آن استفاده میکنیم. برای مثال اگر بخواهیم اولین موضوعِ لیستِ ZeroToHero_Topics را به ما نشان دهد، از دستور زیر استفاده میکنیم:
print(ZeroToHero_Topics[0]) # output: python
و همچنین اگر بخواهیم دروس فرد را در لیست person چاپ کنیم، از دستور زیر استفاده میکنیم:
for i in range(2): print(person[2][i]) """output: DB AP """
تابع ()len سایز لیست را نشان میدهد.
بروزرسانیِ لیست
برای بروزرسانیِ لیست، اسم لیست به همراهِ شماره index آن را مینویسیم و مقدار جدید را برابر آن قرار میدهیم.
برای مثال، اگر بخواهیم عنصر اول لیستِ ZeroToHero_Topics را برابر DataScience قرار دهیم از کد زیر استفاده میکنیم:
ZeroToHero_Topics[0] = "DataScience" print(ZeroToHero_Topics) # output: ['DataScience', 'web', 'academic', 'java', 'android', 'linux']
در مثالهای این مقاله تمامی تغییرات بر روی لیست اصلی انجام میشود.
اضافه کردن به لیست
برای اضافه کردن به آخر لیست ار متد ()append استفاده میکنیم. برای مثال، اگر بخواهیم به آخر لیستِ ZeroToHero_Topics مقدار “Machine Learning” را اضافه کنیم از دستور زیر استفاده میکنیم:
ZeroToHero_Topics.append("Machine Learning") print(ZeroToHero_Topics) # output: ['python', 'web', 'academic', 'java', 'android', 'linux', 'Machine Learning']
تابع ()append فقط به آخر لیست اضافه میکند. اگر بخواهیم مقدار خود را در مکانی که خودمان میخواهیم درج کنیم، از تابع ()insert استفاده میکنیم. متد ()insert دو آرگومان میپذیرد، آرگومان اول شماره index-ی است که میخواهیم در آنجا مقدار را وارد کنیم و آرگومان دوم خودِ مقدار است.
برای مثال، میخواهیم که در خانه سوم لیستِ person، سال تولد را هم اضافه کنیم (در نظر داشته باشید که شمارهگذاری در لیست از صفر شروع میشود) :
person.insert(2, 1998) print(person) # output: ['John', 19, 1998, ['python', 'java'], 14.5]
حذف کردن از لیست
برای حذف کردن از لیست، دو راه وجود دارد. روش اول این است که با استفاده از شماره index آن را حذف کنیم و روش دوم حذف کردنِ با استفاده خود مقدار است.
برای حذف کردن با استفاده از شماره index آن، از دستور del استفاده میکنیم. به عنوان مثال، اگر بخواهیم از لیستِ ZeroToHero_Topics شماره عنصرِ ۴ را حذف کنیم (که android است):
print(ZeroToHero_Topics) del ZeroToHero_Topics[4] print("After Deleting Element 4: ",ZeroToHero_Topics) """ output: ['python', 'web', 'academic', 'java', 'android', 'linux'] After Deleting Element 4: ['python', 'web', 'academic', 'java', 'linux'] """
برای حذف کردن با استفاده از مقدار، از متد ()remove استفاده میکنیم. برای مثال، میخواهیم از لیستِ ZeroToHero_Topics عبارتِ academic را حذف کنیم:
print(ZeroToHero_Topics) ZeroToHero_Topics.remove("academic") print("After removing \"academin\": ",ZeroToHero_Topics) """ output: ['python', 'web', 'academic', 'java', 'android', 'linux'] After removing "academic": ['python', 'web', 'java', 'android', 'linux'] """
اگر مقداری که به متد ()remove میدهید در لیست وجود نداشته باشد، پایتون به شما error میدهد:
print(ZeroToHero_Topics) ZeroToHero_Topics.remove("DataScience") print("After removing \"DataScience\": ",ZeroToHero_Topics) """ output: ['python', 'web', 'academic', 'java', 'android', 'linux'] Traceback (most recent call last): File ".\zerotohero.py", line 61, in <module> ZeroToHero_Topics.remove("DataScience") ValueError: list.remove(x): x not in list """
عملیاتهایی که میتوان بر روی لیست انجام داد به صورت زیر است:
- بدست آوردن سایز لیست:
print("The Length of the list is: ", len(ZeroToHero_Topics)) # output: The Length of the list is: 6
- تلفیق چند لیست:
concatenated_list = ZeroToHero_Topics + person print(concatenated_list) # output: ['python', 'web', 'academic', 'java', 'android', 'linux', 'John', 19, ['python', 'java'], 14.5]
- تکرارِ لیست:
print(ZeroToHero_Topics * 2) # output: ['python', 'web', 'academic', 'java', 'android', 'linux', 'python', 'web', 'academic', 'java', 'android', 'linux']
- عضویت مقداری در لیست:
print("python" in ZeroToHero_Topics) # output: True print("DataScience" in ZeroToHero_Topics) # output: False
- پیمایش کردنِ لیست:
for topic in ZeroToHero_Topics: print(topic) """output: python web academic java android linux """
نمایش مقادیرِ لیست
مقادیر دستهایِ لیست را میتوان به صورت سادهتری هم نشان داد. کروشه به ۳ قسمت با استفاده از دو نقطه (:) جدا میشود. قسمت اول آن شماره index شروع، در قسمت دوم آن شماره index پایان و در آخرین قسمت آن گام حرکت را قرار میدهیم. به عنوان مثال اگر بخواهیم از عنصر اول تا سوم را به ما نشان دهد، با روش کلاسیک باید با حلقه روی آن پیمایش کنیم و مقادیر را نمایش دهیم. ولی با این روش به حلقه نیازی نیست و لیستی را حاوی مقادیر درخواستی به ما بر میگرداند.
for topic in range(0, 3): print(ZeroToHero_Topics[topic]) """output: python web academic """ print(ZeroToHero_Topics[0:3:1]) # output: ['python', 'web', 'academic']
اگر قسمت اول را خالی بگذاریم، پیشفرض از اولِ لیست است. اگر قسمت دوم را خالی بگذاریم، پیشفرض آخر لیست است. اگر خانه آخر را خالی بگذاریم، به صورت پیشفرض ۱ در نظر میگیرد.
همچنین میتوان از index منفی استفاده کرد. اگر index را منفی وارد کنیم، از آخر شروع به شمارش میکند.
print(ZeroToHero_Topics[:3]) # outpu: ['python', 'web', 'academic'] print(ZeroToHero_Topics[3:]) # output: ['java', 'android', 'linux'] print(ZeroToHero_Topics[-1]) # output: linux print(ZeroToHero_Topics[-2]) # output: android print(ZeroToHero_Topics[0: -3]) # output: ['python', 'web', 'academic'] print(person[::2]) # output: ['Bill Gates', 'Steve Jobs', 'Linus Torvalds']
متدهای دیگر
- متد ()pop : حذف کردن آخرین عنصر لیست ( متد ()pop آرگومانی هم میگیرد که شماره index آن عنصر است و که عملکردی مانند del خواهد داشت.)
popped_value = ZeroToHero_Topics.pop() print(popped_value)
- متد ()reverse : معکوس کردن لیست
ZeroToHero_Topics.reverse() print(ZeroToHero_Topics) # output: ['linux', 'android', 'java', 'academic', 'web', 'python']
از عبارت زیر هم میتوان برای نشان دادن معکوس لیست استفاده کرد:
print(ZeroToHero_Topics[::-1]) # output: ['linux', 'android', 'java', 'academic', 'web', 'python']
- متد ()sort : مرتب کردن لیست به صورتِ صعودی (متد ()sort دو آرگومان به نامهای key و reverse هم میگیرد. آرگومان key این امکان را میدهد که بر اساس کلیدی آن را مرتب کنیم و آرگومان reverse اگر True باشد لیست را نزولی و اگر False باشد، لیست را صعودی مرتب میکند.)
list_in_list.sort(reverse=True) print(list_in_list) # output: [[7, 8, 9], [4, 5, 6], [1, 2, 3]] ZeroToHero_Topics.sort() print(ZeroToHero_Topics) # output: ['academic', 'android', 'java', 'linux', 'python', 'web']
روشی دیگر برای تعریف لیست
روشی دیگری وجود دارد که میتوان لیست تعریف کرد، که به list comprehension معروف است. در این روش تمامی حلقهها و شروط در یک خط نوشته میشوند.
فرض کنید که میخواهید لیستی تعریف کنید که شمارههای ۰ تا ۹ در آن باشد. با روش کلاسیک کدِ آن به صورت زیر است:
num_list = [] for i in range(0, 10): num_list.append(i) print(num_list) # output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ولی با list comprehension به صورت زیر میشود:
num_list = [i for i in range(0, 10)] print(num_list) # output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
برای حلقههای تو در تو هم میتوان اینگونه از list comprehension استفاده کرد:
num_list = [] for i in range(0, 5): for j in range (0, 5): num_list.append(i+j) print(num_list) # output: [0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8] num_list1 = [i+j for i in range(0, 5) for j in range(0, 5)] print(num_list1) # output: [0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8]
برای استفاده از شرط در list comprehension از روش زیر استفاده میکنیم:
num_list = [] for i in range(0, 5): for j in range (0, 5): if i*j != 0: num_list.append(i*j) print(num_list) # output: [1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16] num_list1 = [i*j for i in range(0, 5) for j in range(0, 5) if i*j != 0] print(num_list1) # output: [1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16]
در این مقاله سعی شد که تمامی نکاتِ لیست در پایتون پوشش داده شود. کار کردن با لیست پیچیدگیِ خاصی ندارد و به راحتی قابل فهم است. تنها موردی که ممکن است مشکل ایجاد کند، list comprehension است که به تمرین نیاز دارد (در این لینک میتوانید کدهای خود را اجرا کرده و خروجی را مشاهده کنید.). در مقالههای بعدی به مباحث دیگرِ ساختارهای دادهی دنبالهای مانند Tuple و Dictionary خواهیم پرداخت.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.