حذف عضوهای تکراری لیست در پایتون

آسانلیست و الگوریتم

صورت سؤال

برنامه‌ای بنویسید که چند عدد صحیح را در یک خط از ورودی بخواند و عددها را بدون تکرار و با فاصله از هم چاپ کند.

از هر عدد فقط اولین بار ظاهر شدنش باقی بماند و ترتیب عددها همان ترتیب ورودی باشد.

ورودی نمونه

3 1 3 2 1 5 2

خروجی نمونه

3 1 2 5

خودتان امتحان کنید

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

Ctrl + Enter
خروجی

کد را اجرا کنید تا خروجی آن اینجا نمایش داده شود.

راهنمایی

یک لیست خالی به نام unique بسازید. در حلقه، اگر عدد فعلی در unique نبود، آن را با append اضافه کنید.

جواب و توضیح

بهتر است جواب را بعد از امتحان کردن راه خودتان باز کنید.

نمایش جواب
nums = list(map(int, input().split()))

unique = []
for n in nums:
    if n not in unique:
        unique.append(n)

print(*unique)

این جواب چطور کار می‌کند؟

عبارت n not in unique بررسی می‌کند که عدد هنوز در لیست جواب نیامده باشد. فقط در این حالت عدد اضافه می‌شود؛ پس تکرارهای بعدی هر عدد کنار گذاشته می‌شوند.

چون عددها به همان ترتیبی که در ورودی آمده‌اند بررسی و اضافه می‌شوند، ترتیب اولین ظاهر شدن حفظ می‌شود.

print(*unique) عضوهای لیست را جدا از هم به print می‌دهد و print آن‌ها را با یک فاصله کنار هم می‌نویسد. اگر print(unique) بنویسید، کروشه‌ها و ویرگول‌ها هم چاپ می‌شوند.

راه دوم: dict.fromkeys

nums = list(map(int, input().split()))
unique = list(dict.fromkeys(nums))
print(*unique)

dict.fromkeys از عضوهای لیست کلید می‌سازد. دیکشنری کلید تکراری ندارد و ترتیب افزودن را نگه می‌دارد؛ پس همان نتیجه به دست می‌آید و برای لیست‌های بزرگ سریع‌تر هم هست. اما set(nums) ترتیب را حفظ نمی‌کند، چون set اصلاً ترتیبی برای عضوهایش نگه نمی‌دارد.

اشتباه‌های رایج

  • list(set(nums)) می‌نویسند و ترتیب عددها در خروجی به هم می‌ریزد.
  • هنگام پیمایش، با remove از همان لیستی حذف می‌کنند که روی آن حلقه می‌زنند و بعضی عضوها از قلم می‌افتند.
  • print(unique) می‌نویسند و خروجی با کروشه و ویرگول چاپ می‌شود.

تمرین بعدی

پایتون را قدم‌به‌قدم یاد بگیرید

این تمرین یکی از تمرین‌های پایتون با جواب دینا کد است. در دورهٔ پایتون از صفر هر مفهوم یک درس کوتاه دارد و تمرین هر درس با چند آزمون پنهان نمره می‌گیرد؛ درس‌های اول رایگان است. برای امتحان کد آزاد هم اجرای آنلاین پایتون در دسترس است.