تاپل و مرتبسازی دادهها
با دنبالهٔ تغییرناپذیر و جفتهای کلید و مقدار، جدول رتبهبندی بساز.
بعد از این فصل میتوانی…
- تاپل را از فهرست تشخیص بدهی.
- مقدارهای یک تاپل را باز کنی.
- دیکشنری را بر اساس کلید یا مقدار مرتب کنی.
پیشنهاد برای پیشنیاز: دیکشنری و شمارش فراوانی
تاپل و مرتبسازی دادهها
ویدیوی این فصل هنوز اضافه نشده است. میتوانی همین حالا آموزش متنی و تمرینها را شروع کنی.
تاپل چیست؟
تاپل دنبالهای مرتب است که جایگاه اعضایش را پس از ساخت نمیتوان عوض کرد. اندیسگذاری، پیمایش و len مثل فهرست عمل میکنند، اما append یا sort ندارد.
تاپل تکعضوی به ویرگول نیاز دارد: (5,). تغییرناپذیری یعنی جای عضوها را نمیتوان عوض کرد؛ اگر عضوی خودش فهرست باشد، آن فهرست همچنان تغییرپذیر است.
یک نقطهٔ دوبعدی
point = (4, 7)
print(point[0])
print(len(point))
print(type((5,)).__name__)خروجی مورد انتظار
4 2 tuple
باز کردن چند مقدار
با x, y = point دو مقدار را به دو نام نسبت میدهیم. در این شکل ساده تعداد نامها باید با تعداد عضوها برابر باشد.
items() دیکشنری جفتهای کلید و مقدار را میدهد. این جفتها را میتوان در حلقه به دو نام باز کرد.
خواندن جفتها
name, score = ("Sara", 18)
print(name)
print(score)خروجی مورد انتظار
Sara 18
مقایسه و مرتبسازی
تاپلها به ترتیب عضوها مقایسه میشوند: ابتدا عضو اول، و فقط اگر برابر بود عضو بعدی. برای مقایسهٔ ترتیبی، نوع مقدارهای مقابل باید قابل مقایسه باشد.
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
رتبهبندی بر اساس مقدار
اگر جفتها را به شکل (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
خودآزمایی
پاسخ را انتخاب کن و دلیل آن را بخوان. این بخش برای تمرین است و نمرهٔ رسمی ثبت نمیکند.