لیستها
در این درس لیست میسازید، با اندیس به عضوها دسترسی پیدا میکنید، عضو اضافه و حذف میکنید و با حلقه for و توابع آماده روی لیست کار میکنید.
آنچه در این درس میآموزید
- لیست بسازید و با اندیس مثبت و منفی به عضوهای آن دسترسی پیدا کنید
- عضو اضافه و حذف کنید و مقدار عضوها را بهروز کنید
- لیست را با حلقه for پیمایش کنید و از توابع آماده مثل sum و sorted استفاده کنید
فهرست مطالب
تا اینجا هر متغیری که میساختید فقط یک مقدار داشت: یک عدد، یک رشته، یک درست/غلط. اما برنامههای واقعی با گروهی از دادهها سروکار دارند: نمرههای یک کلاس، کالاهای یک سبد خرید، کارهای یک برنامهٔ روزانه. لیست (List) اصلیترین ساختار دادهٔ پایتون برای نگهداشتن چند مقدار کنار هم است؛ ظرفی مرتب که میتوانید عضو به آن اضافه کنید، از آن حذف کنید و در آن جستوجو کنید.
در این درس لیست میسازید، با اندیس به عضوها دسترسی پیدا میکنید، لیست را تغییر میدهید و با حلقهٔ for روی آن پیمایش میکنید. از این پس ستون فقرات بیشتر برنامههایتان همین ساختار است.
ساخت لیست و دسترسی به عضوها
لیست با کروشه ساخته میشود و عضوها با ویرگول از هم جدا میشوند. هر عضو یک جایگاه شمارهدار به نام اندیس (Index) دارد که از صفر شروع میشود:
scores = [18, 15, 20, 12]
print(scores[0])
print(scores[-1])
print(len(scores))18 12 4
عبارت scores[0] اولین عضو را میدهد. اندیس منفی از انتهای لیست میشمارد؛ پس scores[-1] آخرین عضو است. تابع len() هم تعداد عضوهای هر لیستی را برمیگرداند. دقت کنید آخرین اندیس معتبر «طول منهای یک» است، نه خودِ طول؛ این تفاوت منبع خطای رایج است که کمی بعد میبینید.
تغییر لیست؛ افزودن، حذف و جایگزینی
لیست تغییرپذیر (Mutable) است؛ یعنی پس از ساخت هم میتوانید محتوایش را عوض کنید:
tasks = ["shopping", "study"]
tasks.append("sport")
tasks[0] = "buy bread"
tasks.remove("study")
print(tasks)['buy bread', 'sport']
سه کار در این برنامه انجام شد:
appendعضو «ورزش» را به انتهای لیست اضافه کرد.- تخصیص
tasks[0] = ...عضو اندیس صفر را با «خرید نان» جایگزین کرد. removeنخستین عضوی که مقدارش برابر آرگومان بود را پیدا و حذف کرد.
پایتون لیست را با کروشه و هر رشته داخل گیومه نشان میدهد؛ همین شکلی است که چاپ میشود. آزمون «آیا این مقدار در لیست هست؟» هم با عملگر in انجام میشود و جواب درست/غلط میدهد:
tasks = ["shopping", "study"]
print("study" in tasks)
print("sport" in tasks)True False
:::
پیمایش لیست با حلقه for
برای کار کردن با همهٔ عضوها لازم نیست اندیس را دستی زیاد کنید؛ حلقه for هر عضو را به ترتیب در یک متغیر میگذارد:
scores = [18, 15, 20]
total = 0
for s in scores:
total += s
print(total)53
حلقه سه بار میچرخد و در هر دور مقدار بعدی لیست را در s میگذارد؛ جمعزننده total با += که در درس عملگرها دیدید بهروز میشود. ترکیب «لیست + حلقه + تابع» همان الگویی است که در درس توابع برای پردازش هر مجموعه دادهای به کار میبرید.
توابع آماده روی لیست
پایتون برای کارهای رایج روی لیست اعداد توابع آماده دارد:
numbers = [7, 2, 9, 4]
print(max(numbers))
print(min(numbers))
print(sum(numbers))
print(sorted(numbers))9 2 22 [2, 4, 7, 9]
max و min بزرگترین و کوچکترین عضو را میدهند، sum همه را جمع میزند و sorted یک لیست جدیدِ مرتبشده برمیگرداند؛ لیست اصلی دستنخورده میماند.
تمرینها
تمرین
تمرین ۱ — شمارش نمرههای قبولی
تابعی به نام count_pass بنویسید که لیستی از نمرهها بگیرد و تعداد نمرههای بزرگتر یا مساوی ۱۰ را برگرداند؛ سپس آن را روی لیست [12, 8, 17, 5, 10] فراخوانی و نتیجه را چاپ کنید.
# Write your code hereنمایش راهحل
def count_pass(scores):
count = 0
for s in scores:
if s >= 10:
count += 1
return count
print(count_pass([12, 8, 17, 5, 10]))3
::: :::
خلاصه
- لیست با کروشه ساخته میشود؛ مرتب است و اندیسهایش از صفر شروع میشود.
- اندیس منفی از انتها میشمارد و
len()تعداد عضوها را میدهد. - لیست تغییرپذیر است:
appendاضافه میکند،removeحذف میکند و تخصیص با اندیس جایگزین میکند. - عملگر
inآزمون عضویت است و حلقه for لیست را عضوبهعضو پیمایش میکند. maxوminوsumوsortedتوابع آمادهٔ پرکاربرد روی لیستهای عددیاند.
لیست محتوایش را هر لحظه میپذیرد و عوض میکند؛ اما گاهی دادهای دارید که نباید تغییر کند. در درس بعدی سراغ تاپل میرویم؛ نسخهٔ تغییرناپذیر دنبالهها.