✍️ وقتی فقط یک نمای مرتب از داده میخواهیم، نباید برای ساخت آن اصل داده را جابهجا کنیم. این موضوع در یک برنامه واقعی به معنی حفظ ترتیب ثبت اطلاعات یا اجازه مقایسه قبل و بعد است. sorted برای این نیاز خروجی تازه میدهد؛ لازم نیست اول ورودی را با متد sort تغییر بدهیم و بعد کپی بگیریم.
مثلاً برای ['river', 'sky', 'a'] مرتبسازی طولی ['a','sky','river'] میدهد، ولی خود words باید همان ترتیب اول را داشته باشد. رشته خالی طول صفر دارد و به ابتدای خروجی میآید. دو رشته همطول به همان ترتیب قبلی باقی میمانند؛ اینجا ترتیب الفبایی معیار نیست.
تابع این تمرین یک دیکشنری خلاصه برمیگرداند تا هم ترتیب اولیه و هم خروجی مرتب را بتوانیم کنار هم ببینیم. بخشهای ناقص را با sorted و key=len کامل کن. خطای رایج، ذخیره کردن نتیجه sort یا افزودن معیار الفبایی برای شکستن تساوی است. اگر قرارداد فقط طول را گفته، معیار اضافی حتی اگر ظاهراً مرتبتر باشد پاسخ درست نیست. در آزمون شخصی، یک ورودی با چند رشته همطول هم بساز.
تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.
فعالیت شما
تابع length_order_snapshot(words) فهرست رشتهها میگیرد و دیکشنری {'original':فهرست با ترتیب اولیه,'ordered':فهرست مرتب بر اساس طول صعودی} میدهد. ورودی تغییر نکند؛ تساوی طول ترتیب اولیه را حفظ کند. خالی هر دو []؛ رشته خالی طول صفر است. برای ['bb','a','cc'] ordered برابر ['a','bb','cc'] و original همان ['bb','a','cc'] است. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا میزند و حفظ ورودی را بررسی میکند. آن را تغییر نده؛ پاسخ تو همان تابع خواستهشده است.