فصل ۸ · ادامهٔ مسیر

فهرست‌ها و مجموعهٔ داده‌ها

چند مقدار را کنار هم نگه دار، تغییر بده، مرتب کن و از متن استخراج کن.

۴۵ دقیقهٔ پیشنهادی مطالعه و تمرین۵ بخشتمرین عملی و خودآزمایی

بعد از این فصل می‌توانی…

  • فهرست بسازی و اعضایش را تغییر بدهی.
  • با append، sort و تابع‌های آماری کار کنی.
  • متن را با split به فهرست تبدیل کنی.

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

ویدیوی این فصل

فهرست‌ها و مجموعهٔ داده‌ها

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

بخش 1

یک نام، چند مقدار

فهرست یا list چند مقدار را با ترتیب مشخص نگه می‌دارد. اعضا داخل [] و با ویرگول جدا می‌شوند. فهرست خالی [] است و اعضا می‌توانند نوع‌های مختلف یا حتی فهرست باشند.

اندیس‌ها از صفر شروع می‌شوند. برخلاف رشته، فهرست تغییرپذیر است و می‌توان به یک اندیس مقدار تازه داد.

اصلاح یک نمره

scores = [12, 15, 18]
scores[1] = 17
print(scores)
print(len(scores))
خروجی مورد انتظار
[12, 17, 18]
3
بخش 2

پیمایش مستقیم و range

اگر خود مقدار را لازم داری، for score in scores خواناست. اگر باید بر اساس موقعیت تغییر ایجاد کنی، از range(len(scores)) برای اندیس‌ها استفاده کن.

در پایتون ۳، range یک شیء قابل پیمایش است، نه فهرست آماده. list(range(4)) فهرست [0, 1, 2, 3] می‌سازد. عدد پایان داخل بازه نیست.

افزودن یک امتیاز

scores = [12, 15, 18]
for index in range(len(scores)):
    scores[index] += 1
print(scores)
خروجی مورد انتظار
[13, 16, 19]
بخش 3

افزودن، حذف، برش و مرتب‌سازی

append یک عضو به انتها اضافه می‌کند و remove اولین عضو با مقدار داده‌شده را حذف می‌کند؛ اگر آن مقدار نباشد خطا می‌دهد. in برای بررسی وجود عضو مفید است.

sort خود فهرست را مرتب می‌کند و None برمی‌گرداند. sorted یک فهرست مرتب‌شدهٔ جدید می‌سازد. برش و + نیز فهرست تازه می‌سازند.

فهرست خرید

items = ["book", "pen"]
items.append("bag")
items.remove("pen")
items.sort()
print(items)
print(items[:1])
خروجی مورد انتظار
['bag', 'book']
['bag']
بخش 4

محاسبه با فهرست

len تعداد اعضا، sum مجموع، min کمترین و max بیشترین را می‌دهد. برای میانگین فهرست عددی از sum(values) / len(values) استفاده کن.

فهرست خالی را پیش از میانگین یا min/max بررسی کن؛ تقسیم بر صفر یا درخواست کمترینِ هیچ عضو خطا می‌دهد.

خلاصهٔ نمره‌ها

scores = [12, 18, 15]
if scores:
    print(min(scores), max(scores))
    print(sum(scores) / len(scores))
خروجی مورد انتظار
12 18
15.0
بخش 5

split و استخراج دومرحله‌ای

split() متن را بر اساس فاصله‌های سفید به واژه‌ها می‌شکند. با split(";") جداکننده را خودت تعیین می‌کنی. نتیجه فهرستی از رشته‌هاست، حتی اگر متن‌ها شبیه عدد باشند.

برای یک خط ایمیلِ دارای ساختار معلوم، ابتدا واژه‌ها را جدا کن و سپس آدرس را بر اساس @ بشکن. در دادهٔ واقعی پیش از اندیس‌گذاری تعداد قطعه‌ها را بررسی کن.

دامنه با دو split

line = "From sara@example.org Saturday"
words = line.split()
email = words[1]
pieces = email.split("@")
print(pieces[1])
خروجی مورد انتظار
example.org
حالا نوبت توست

میانگین ورودی‌های متنی

ورودی «12 18 15» را به بخش‌ها تقسیم کن، هر بخش را float کن و به فهرست اضافه کن. میانگین را چاپ کن؛ برای ورودی خالی پیام مناسب بده.

یک راهنمای کوچک

در حلقه scores.append(float(part)) را به کار ببر؛ قبل از تقسیم خالی نبودن scores را بررسی کن.

پاسخ پیشنهادی و خروجی
parts = input().split()
scores = []
for part in parts:
    scores.append(float(part))
if scores:
    print(sum(scores) / len(scores))
else:
    print("داده‌ای وارد نشده")

خروجی نمونه

15.0

خودآزمایی

پاسخ را انتخاب کن و دلیل آن را بخوان. این بخش برای تمرین است و نمرهٔ رسمی ثبت نمی‌کند.

1. کدام دستور یک عضو به انتهای فهرست اضافه می‌کند؟
2. در پایتون ۳، برای ساخت فهرست اعداد ۰ تا ۳ کدام درست است؟