🧺 ساختمان داده‌ها

مجموعه (set): یکتاها، اشتراک و تفاضل

۶ گام

مجموعه: یکتا و بی‌ترتیب

u = set([3, 1, 3, 2])        # {1, 2, 3}
empty = set()                # نه {} (آن دیکشنری است)
a, b = {1, 2, 3}, {2, 3, 4}
print(a & b, a | b, a - b)   # اشتراک، اجتماع، تفاضل
a.add(9); a.discard(100)     # discard اگر نبود خطا نمی‌دهد
  • x in s روی مجموعه خیلی سریع‌تر از لیست است.
  • عضوها باید تغییرناپذیر باشند (عدد، رشته، تاپل).

درس کامل مجموعه را با ۸ تمرین پله‌پله و چالش سودوکو هم ببین.

  1. ۱گام ۱

    مجموعه (set) فقط عضوهای یکتا نگه می‌دارد و ترتیب ندارد. ساده‌ترین کاربردش حذف تکراری‌هاست.

    لیست nums = [3, 1, 3, 2, 1, 5] را بساز. بعد u = set(nums) و تعداد عضوهای یکتا را با len(u) چاپ کن.

  2. ۲گام ۲

    دو کلاس داریم:

    a = {'sara', 'ali', 'reza'} (کلاس پایتون) و b = {'ali', 'mina'} (کلاس ریاضی).

    کسانی که در هر دو کلاس هستند، اشتراک دو مجموعه‌اند: a & b. متغیر both را برابر اشتراک بگذار و sorted(both) را چاپ کن. (sorted فقط برای اینکه خروجی ترتیب ثابت داشته باشد.)

  3. ۳گام ۳

    دو عمل دیگر: اجتماع a | b (در دست‌کم یکی) و تفاضل a - b (در a هست، در b نیست).

    متغیر everyone را اجتماع و only_a را تفاضل a - b بگذار. بعد len(everyone) و sorted(only_a) را در دو خط چاپ کن.

  4. ۴گام ۴

    مجموعه تغییرپذیر است: add یک عضو اضافه می‌کند. برای حذف دو متد داریم: remove اگر عضو نباشد خطا می‌دهد، ولی discard بی‌صدا رد می‌شود.

    'omid' را به a اضافه کن، بعد با discard عضو 'nobody' را (که وجود ندارد) حذف کن و در آخر len(a) را چاپ کن.

  5. ۵گام ۵

    set(nums) تکراری‌ها را حذف می‌کند ولی ترتیب را به هم می‌زند. اگر ترتیب اولین ظهور مهم باشد، الگوی «دیده‌شده‌ها» به کار می‌آید:

    یک مجموعهٔ خالی seen = set() و یک لیست خالی result = [] بساز. روی nums حلقه بزن؛ هر عددی که در seen نبود را هم به seen اضافه کن، هم به result. در پایان result را چاپ کن. باید [3, 1, 2, 5] ببینی.

  6. ۶گام ۶

    مسئلهٔ کلاسیک: آیا در یک لیست، دو عدد در دو جای متفاوت هست که جمعشان target شود؟

    تابع has_pair_sum(nums, target) را با یک حلقه و یک مجموعهٔ seen بنویس: وقتی به عدد x می‌رسی، بپرس آیا target - x را قبلاً دیده‌ای. اگر بله، True برگردان؛ وگرنه x را به seen اضافه کن. اگر حلقه تمام شد، False.

در حال آماده‌سازی ویرایشگر…