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

حذف تکرار فهرست مرتب با دو اشاره‌گر پایتون

الگوی دو اشاره‌گر در پایتون؛ دو سر فهرست و حذف تکرار · 0٪

✍️ در ورودی مرتب، تمام تکرارهای هر مقدار کنار هم هستند. لازم نیست برای هر عضو همه خروجی قبلی را بگردیم؛ کافی است عضو فعلی را با آخرین مقدار ثبت‌شده مقایسه کنیم. اگر متفاوت بود یک مقدار تازه داریم. اینجا دو نقش داریم: یک شاخص خواندن روی ورودی و یک شاخص نوشتن روی یک فضای کاری جدا.

مثلاً از [2, 2, 5, 5, 5, 8] به [2, 5, 8] می‌رسیم. اولین دو ثبت می‌شود، دو بعدی رد می‌شود و با دیدن پنج، محل نوشتن یک خانه جلو می‌رود. ترتیب صعودی حفظ می‌شود و فقط یک نسخه از هر مقدار باقی می‌ماند.

چون قرارداد اجازه تغییر ورودی را نمی‌دهد، یک کپی برای فضای کاری بساز یا خروجی تازه‌ای را به‌تدریج پر کن. خالی باید خروجی خالی بدهد و فهرست کاملاً تکراری یک عضو خواهد داشت. خطای رایج، مقایسه با خانه قبلیِ خروجی پیش از ثبت اولین عضو یا برگرداندن تمام فضای کاری شامل خانه‌های استفاده‌نشده است. لازم نیست set بسازی؛ هدف دیدن این است که مرتب بودن چگونه مقایسه با یک همسایه را کافی می‌کند.

تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند، حفظ ورودی و تازه بودن فهرست خروجی را بررسی می‌کند؛ خروجی حتی برای خالی و تک‌عضوی نباید همان فهرست ورودی باشد. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

فعالیت شما

تابع unique_sorted(nums) فهرست صعودی غیرکاهشی اعداد صحیح را می‌گیرد و یک فهرست تازه صعودی با فقط یک نسخه از هر مقدار برمی‌گرداند. ورودی تغییر نکند. خالی []، همه‌برابر یک عضو و تک‌عضوی همان مقدار در فهرست تازه است؛ unique_sorted([2,2,5,8,8])=[2,5,8]. با پیمایش و محل نوشتن حل کن. تابع آماده course_check فقط برای ارزیابی است: تابع اصلی را صدا می‌زند، حفظ ورودی و تازه بودن فهرست خروجی را بررسی می‌کند؛ خروجی حتی برای خالی و تک‌عضوی نباید همان فهرست ورودی باشد. آن را تغییر نده؛ پاسخ تو همان تابع خواسته‌شده است.

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

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

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

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

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

def unique_sorted(nums):
    # TODO: use a read position and an output/write position
    pass

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