سازماندهی یک لیست

گاهی لیست‌های شما با ترتیبی غیر قابل پیش‌بینی ساخته می‌شوند زیرا نمی‌توانید همواره ترتیبی را که کاربران بر اساسِ آن داده‌ها را وارد می‌کنند کنترل کنید. شما معمولاً می‌خواهید داده‌ها را با ترتیبی مشخّص نمایش دهید هرچند در بسیاری از شرایط عملاً مجبور به این کار هستید. گاهی می‌خواهید ترتیب اصلی داده‌ها را حفظ کنید و گاهی آن را تغییر می‌دهید. پایتون بسته به شرایط چند روش مختلف برای سازمان دادن به لیست‌ها ارائه می‌کند.

مرتّب کردن دائمی یک لیست به کمک sort()

متد sort() پایتون مرتّب کردن لیست‌ها را نسبتاً ساده می‌کند. فرض کنید لیستی از خودروها داریم و می‌خواهیم ترتیب لیست را تغییر بدهیم تا آن‌ها را به ترتیب حروف الفبا ذخیره کنیم. برای این که کار راحت‌تر باشد فرض کنید تمام مقادیر لیست با حروف کوچک نوشته شده‌اند.

1
2
3
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

متد sort() که در 2 نمایش داده شده ترتیب لیست را به صورت دائمی عوض می‌کند. خودروها اکنون دیگر به ترتیب الفبایی هستند و نمی‌توانیم آن‌ها را به ترتیب اولیّه برگردانیم:

1
['audi', 'bmw', 'subaru', 'toyota']

برای مرتّب کردن به ترتیب عکس (از حروف بزرگ به کوچک) می‌توانید نشانوند reverse=True را به متد sort() بدهید. این مثال لیست خودروها را به ترتیب الفبایی معکوس مرتّب می‌کند:

1
2
3
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

ترتیب لیست مجدداً به طور دائمی تغییر یافته است:

1
['toyota', 'subaru', 'bmw', 'audi']

مرتّب کردن موقّت یک لیست به کمک تابع sorted()

برای حفظ کردن ترتیب اصلی لیست یا تنها نمایش دادن آن با ترتیبی مشخّص، می‌توانید از تابع sorted() استفاده کنید. این تابع کمک می‌کند که لیست را با ترتیبی خاص صرفاً نمایش دهید امّا بر ترتیب اصلی آن تاثیری نمی‌گذارد.

حال این تابع را بر روی لیست خودروها اعمال می‌کنیم:

1
2
3
4
5
6
7
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("Here is the original list:")
print(cars)
print("\nHere is the sorted list:")
print(sorted(cars))
print("\nHere is the original list again:")
print(cars)

ابتدا در2 لیست را با ترتیب اصلی و سپس در 4 به ترتیب حروف الفبا چاپ می‌کنیم. پس از نمایش لیست مرتّب، در ۳ نشان می‌دهیم که ترتیب اصلی لیست دست‌نخورده باقی مانده است.(6)

1
2
3
4
5
6
7
8
Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']

Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']

دقّت کنید که در 5 و پس از به‌کارگیری تابع sorted() لیست همچنان به ترتیب اصلی خود باقیمانده است. تابع sorted() نیز نشان‌وند reverse=True را برای مرتّب کردن معکوس الفبایی می‌پذیرد.

نکته
اگر تمام مقادیر با حروف کوچک ذخیره نشده باشند، مرتّب کردن الفبایی لیست کمی مشکل‌تر می‌شود. هنگام تعیین کردن ترتیب مرتّب‌سازی، راه‌های مختلفی برای تفسیر حروف بزرگ وجود دارد و تعیین ترتیب دقیق ممکن است اکنون برای ما کمی پیچیده‌ باشد. با این حال بیشتر رویکردهای مرتّب سازی که مورد بررسی قرار خواهد گرفت بر اساس چیزی است که در این بخش آموخته‌اید.

چاپ کردن لیست با ترتیب معکوس

برای عکس کردن ترتیب اصلی یک لیست می‌توانید از متد reverse() استفاده کنید. اگر از ابتدا لیست خودروها را به ترتیب زمانِ خریدن مرتّب کرده باشیم، می‌توانیم به سادگی لیست را به ترتیبِ زمانیِ معکوس بازآرایی کنیم:

1
2
3
4
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)
cars.reverse()
print(cars)

توجّه داشته باشید که reverse() اعضا را به ترتیب عکسِ حروفِ الفبا مرتّب نمی‌کند بلکه تنها به سادگی ترتیب آن‌ها را عکس می‌کند:

1
2
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

متد reverse() ترتیب لیست را به طور دائم عوض می‌کند امّا می‌توانید با اعمال دوباره‌ی آن، لیست را به ترتیب اصلی آن برگردانید.

یافتن طول یک لیست

طول یک لیست را می‌توان به سرعت به کمک تابع len() یافت. لیستِ این مثال چهار عضو دارد پس طول آن ۴ است:

1
2
3
>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4

استفاده از len() هنگامی سودمند است که بخواهید تعیین کنید در بازی چند موجود بیگانه برای کشتن باقیمانده است، تعداد داده‌هایی که برای بصری‌سازی با مدیریت شوند کدام است یا تعداد کاربران ثبت نام کرده در وبسایت چندتاست.

نکته
استفاده از len() هنگامی سودمند است که بخواهید تعیین کنید در بازی چند موجود بیگانه برای کشتن باقیمانده است، تعداد داده‌هایی که برای بصری‌سازی با مدیریت شوند کدام است یا تعداد کاربران ثبت نام کرده در وبسایت چندتاست.

خودآزمایی

تماشای جهان

به پنج نقطه از جهان فکر کنید که دوست دارید آن‌ها از نزدیک ببینید.

  • این مکان‌ها را در لیستی ذخیره کنید. مطمئن شوید که ترتیب ذخیره الفبایی نباشد.
  • لیست را با ترتیب اصلی چاپ کنید. نگران چاپ کردن تمیز و منظم نباشید و لیست را به صورت یک لیست خام پایتون چاپ کنید.
  • از sorted() برای چاپ لیست به ترتیب الفبایی و بدون دست خوردن آن استفاده کنید.
  • نشان دهید که لیست شما همچنان با ترتیب اصلی ذخیره شده است.
  • از sorted() برای مرتّب‌سازی الفبایی معکوس بدون دست زدن به ترتیب لیست اصلی استفاده کنید.
  • نشان دهید که لیست شما همچنان با ترتیب اصلی ذخیره شده است.
  • از reverse() برای معکوس کردن ترتیب اعضای لیست استفاده کنید. آن را چاپ کنید تا نشان دهید که ترتیب عوض شده است.
  • دوباره از reverse() برای معکوس کردن لیست استفاده کنید. نشان دهید که لیست به ترتیب اصلی خود برگشته است.
  • از sort() برای مرتب کردن لیست به ترتیب الفبا استفاده کنید.آن را چاپ کنید تا نشان دهید ترتیب عوض شده است.
  • از sort() برای مرتب کردن لیست به ترتیب الفبایی معکوس استفاده کنید. آن را چاپ کنید تا نشان دهید ترتیب عوض شده است.

مهمان‌های شام

با کار بر روی یکی از تمرین‌های ۳-۴ تا ۳-۷ در صفحه‌ی ***، به کمک len() پیامی چاپ کنید که تعداد افراد دعوت‌شده را نمایش دهد.

تمام تابع‌ها

به چیزی که بتوان آن را در لیستی ذخیره کرد فکر کنید. برای مثال فهرست کوه‌ها، رودخانه‌ها، کشورها، زبان‌ها یا هر چیزی که دوست دارید. برنامه‌ای بنویسید که لیستی شامل این موارد ایجاد کند و تمام توابعی را که در این فصل آموخته‌اید یک بار روی آن اعمال کنید.