حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش الگوریتم و حل مسئله با پایتون؛ تمرین عملی

مرتب‌سازی بدون تغییر ورودی با key در پایتون

مرتب‌سازی سفارشی پایتون؛ key و ترتیب پایدار · 0٪

✍️ وقتی فقط یک نمای مرتب از داده می‌خواهیم، نباید برای ساخت آن اصل داده را جابه‌جا کنیم. این موضوع در یک برنامه واقعی به معنی حفظ ترتیب ثبت اطلاعات یا اجازه مقایسه قبل و بعد است. 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 فقط برای ارزیابی است: تابع اصلی را صدا می‌زند و حفظ ورودی را بررسی می‌کند. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

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

کد اولیهٔ فعالیت

def length_order_snapshot(words):
    # TODO: create the ordered copy without rearranging words
    ordered = []
    return {'original': list(words), 'ordered': ordered}

# این تابع آماده فقط برای ارزیابی است؛ آن را تغییر نده.
def course_check(*args):
    from copy import deepcopy
    before = deepcopy(args)
    result = length_order_snapshot(*args)
    if args != before:
        raise ValueError('ورودی نباید تغییر کند.')
    return result