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

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

با دنبالهٔ تغییرناپذیر و جفت‌های کلید و مقدار، جدول رتبه‌بندی بساز.

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

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

  • تاپل را از فهرست تشخیص بدهی.
  • مقدارهای یک تاپل را باز کنی.
  • دیکشنری را بر اساس کلید یا مقدار مرتب کنی.

پیشنهاد برای پیش‌نیاز: دیکشنری و شمارش فراوانی

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

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

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

بخش 1

تاپل چیست؟

تاپل دنباله‌ای مرتب است که جایگاه اعضایش را پس از ساخت نمی‌توان عوض کرد. اندیس‌گذاری، پیمایش و len مثل فهرست عمل می‌کنند، اما append یا sort ندارد.

تاپل تک‌عضوی به ویرگول نیاز دارد: (5,). تغییرناپذیری یعنی جای عضوها را نمی‌توان عوض کرد؛ اگر عضوی خودش فهرست باشد، آن فهرست همچنان تغییرپذیر است.

یک نقطهٔ دوبعدی

point = (4, 7)
print(point[0])
print(len(point))
print(type((5,)).__name__)
خروجی مورد انتظار
4
2
tuple
بخش 2

باز کردن چند مقدار

با x, y = point دو مقدار را به دو نام نسبت می‌دهیم. در این شکل ساده تعداد نام‌ها باید با تعداد عضوها برابر باشد.

items() دیکشنری جفت‌های کلید و مقدار را می‌دهد. این جفت‌ها را می‌توان در حلقه به دو نام باز کرد.

خواندن جفت‌ها

name, score = ("Sara", 18)
print(name)
print(score)
خروجی مورد انتظار
Sara
18
بخش 3

مقایسه و مرتب‌سازی

تاپل‌ها به ترتیب عضوها مقایسه می‌شوند: ابتدا عضو اول، و فقط اگر برابر بود عضو بعدی. برای مقایسهٔ ترتیبی، نوع مقدارهای مقابل باید قابل مقایسه باشد.

sorted(data.items()) جفت‌ها را معمولاً از روی کلید مرتب می‌کند. sorted همیشه فهرست تازه برمی‌گرداند و دادهٔ اولیه را تغییر نمی‌دهد.

مرتب‌سازی بر اساس کلید

scores = {"Mina": 17, "Ali": 19, "Sara": 18}
for name, score in sorted(scores.items()):
    print(name, score)
خروجی مورد انتظار
Ali 19
Mina 17
Sara 18
بخش 4

رتبه‌بندی بر اساس مقدار

اگر جفت‌ها را به شکل (score, name) بسازی، مرتب‌سازی ابتدا نمره را مقایسه می‌کند. reverse=True ترتیب نزولی می‌دهد و برش [:3] سه مورد اول را انتخاب می‌کند.

اگر نمره‌ها برابر باشند، عضو دوم تعیین‌کننده می‌شود. برای حالتی که قانون دیگری برای تساوی لازم است، باید آن قانون را جداگانه طراحی کنی. ساخت فهرست با [(v, k) for k, v in data.items()] شکل فشردهٔ همین حلقه است.

دو نفر اول

scores = {"Mina": 17, "Ali": 19, "Sara": 18}
ranking = []
for name, score in scores.items():
    ranking.append((score, name))
for score, name in sorted(ranking, reverse=True)[:2]:
    print(name, score)
خروجی مورد انتظار
Ali 19
Sara 18
حالا نوبت توست

دو واژهٔ پرتکرار

از دیکشنری زیر، جفت‌های (count, word) بساز و دو واژهٔ دارای بیشترین شمارش را چاپ کن.

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

پس از sorted(..., reverse=True)، دو عضو اول را بردار و هنگام چاپ ترتیب word و count را رعایت کن.

پاسخ پیشنهادی و خروجی
counts = {"code": 4, "python": 7, "learn": 2}
ranking = []
for word, count in counts.items():
    ranking.append((count, word))
for count, word in sorted(ranking, reverse=True)[:2]:
    print(word, count)

خروجی نمونه

python 7
code 4

خودآزمایی

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

1. کدام یک تاپل تک‌عضوی است؟
2. در مقایسهٔ (2, 9) و (3, 1) ابتدا کدام عضو سنجیده می‌شود؟