توابع مجموعه در پایتون
در واقع، در این درس توابع مجموعه در پایتون را از پایه و با مثال یاد میگیرید.
بنابراین در درس قبل دیدید که مجموعه تکراری قبول نمیکند و ترتیب ندارد. حالا وقت آن است که ببینید چرا این ساختار واقعاً قدرتمند است.
همچنین، فرض کنید دو فهرست دارید: کسانی که دورهی پایتون خریدهاند و کسانی که دورهی جنگو خریدهاند. سؤالهایی که پیش میآید طبیعی است: چه کسانی هر دو را خریدهاند؟ چه کسانی فقط یکی را؟ روی هم چند نفرند؟
به این ترتیب، با لیست و حلقه هم میشود اینها را حساب کرد، ولی با مجموعه هر کدامشان یک خط است.
اشتراک
python = {"علی", "زهرا", "رضا"}
django = {"زهرا", "رضا", "مریم"}
print(python & django)
print(python.intersection(django))
{'رضا', 'زهرا'}
{'رضا', 'زهرا'}
علاوه بر این، هر دو شکل یک کار میکنند. علامتها کوتاهترند و نام متدها خواناتر؛ هر کدام را دوست دارید انتخاب کنید ولی در یک پروژه یکدست باشید.
اجتماع
print(python | django)
{'علی', 'زهرا', 'رضا', 'مریم'}
در نهایت، همهی افراد، بدون تکرار. این دقیقاً همان «تعداد کل دانشجویان یکتا» است که در گزارشها لازم میشود.
تفاضل
print(python - django)
print(django - python)
{'علی'}
{'مریم'}
در واقع، دقت کنید که ترتیب مهم است. تفاضل مثل تفریق است نه مثل جمع. این مورد دقیقاً جواب سؤال «کسانی که پایتون خریدهاند ولی هنوز جنگو نخریدهاند» است؛ دقیقاً همان فهرستی که برای فروش دورهی بعدی لازم دارید.
تفاضل متقارن
print(python ^ django)
{'علی', 'مریم'}
یعنی کسانی که فقط در یکی از دو مجموعه هستند و در هر دو نیستند.
python django
┌────────────┐ ┌────────────┐
│ علی │زهرا رضا│ مریم │
└────────────┘ └────────────┘
▲ ▲ ▲
│ │ │
python-django & django-python
└────── ^ ────────────┘
همهی سه ناحیه روی هم = |
زیرمجموعه
a = {"زهرا", "رضا"}
print(a.issubset(python))
print(python.issuperset(a))
True
True
افزودن و حذف
colors = {"قرمز", "سبز"}
colors.add("آبی")
colors.discard("زرد") # اگر نباشد خطا نمیدهد
colors.remove("سبز") # اگر نباشد خطا میدهد
print(colors)
تفاوت discard و remove را جدی بگیرید. وقتی مطمئن نیستید عضوی وجود دارد یا نه، discard انتخاب امنتری است.
جدول مرجع
| معنی | متد | علامت |
| اعضای مشترک | intersection | & |
| همهی اعضا | union | | |
| اعضای اولی که در دومی نیستند | difference | - |
| اعضای غیرمشترک | symmetric_difference | ^ |
اشتباهات رایج
انتظار خروجی مرتب
هیچکدام از این عملیات، ترتیب مشخصی تضمین نمیکنند. اگر خروجی مرتب میخواهید، آخر کار sorted بزنید.
استفاده از علامتها روی لیست
[1, 2] & [2, 3]
TypeError: unsupported operand type(s) for &: 'list' and 'list'
این عملیات فقط روی مجموعه کار میکنند. اگر دادهتان لیست است، اول تبدیلش کنید:
result = set([1, 2]) & set([2, 3])
print(result)
جمعبندی
مجموعهها هر جا که مسئله بوی «مشترک»، «در یکی هست در دیگری نیست» یا «یکتا» میدهد، بهترین ابزارند. کدی که با مجموعه یک خط میشود، با حلقه ده خط میشود.
در درس بعدی وارد موضوع تازهای میشویم: تابع.
برای مطالعهی بیشتر میتوانید به مستندات رسمی پایتون سر بزنید.
این درس بخشی از دوره آموزش پایتون مقدماتی است.