مجموعهها
در این درس مجموعه میسازید و مقدارهای تکراری را حذف میکنید، آزمون عضویت سریع را میبینید و اشتراک و اجتماع و تفاضل را محاسبه میکنید.
آنچه در این درس میآموزید
- مجموعه بسازید و با آن مقدارهای تکراری را از داده حذف کنید
- آزمون عضویت را با in انجام دهید و بدانید چرا سریع است
- اشتراک و اجتماع و تفاضل را با عملگرهای & و | و - حساب کنید
فهرست مطالب
تا اینجا سه ساختار داده دیدید: لیست و تاپل با ترتیب، دیکشنری با کلید. مجموعه (Set) چیز دیگری است: ظرفی بدون ترتیب و بدون تکرار. در مجموعه هر مقدار حداکثر یک بار میآید و جایگاهی هم ندارد؛ فقط اهمیت دارد «هست یا نیست». همین دو ویژگی، مجموعه را ابزار اصلی حذف تکراریها و آزمون عضویت سریع میکند.
در این درس مجموعه میسازید، عضو اضافه و حذف میکنید و با عملیات ریاضیِ آشنایی مثل اشتراک و اجتماع کار میکنید.
ساخت مجموعه و حذف تکراریها
تابع set() هر دنبالهای میگیرد و فقط مقادیر یکتایش را نگه میدارد:
numbers = [4, 2, 4, 7, 2]
unique = set(numbers)
print(len(unique))
print(sorted(unique))3 [2, 4, 7]
از ۵ عضوِ لیست ورودی، فقط ۳ مقدار یکتا ماند. برای نمایش از sorted کمک گرفتیم؛ چون مجموعه ترتیب ندارد و چاپ مستقیم آن ممکن است هر بار به شکلی نشان داده شود. اگر به ترتیب نیاز دارید، مجموعه را با sorted() به لیست مرتب تبدیل کنید.
آزمون عضویت
مهمترین کار روزمرهٔ مجموعه، پرسیدن «هست یا نیست» است:
banned = {"spam", "ads"}
print("spam" in banned)
print("news" in banned)True False
مثل دیکشنری، مجموعه هم بر پایهٔ جدول هش کار میکند؛ برای همین آزمون in برخلاف لیست که عضوبهعضو میگردد، حتی در مجموعههای میلیونعضوی هم تقریباً بیدرنگ جواب میدهد.
افزودن و حذف عضو
skills = {"python"}
skills.add("sql")
skills.add("python")
print(sorted(skills))
skills.discard("sql")
print(sorted(skills))['python', 'sql'] ['python']
add عضو اضافه میکند؛ افزودن مقدار تکراری هیچ تغییری نمیدهد چون تکرار در مجموعه بیمعناست. discard عضو را حذف میکند و اگر عضو نباشد خطا نمیدهد؛ متد remove همین کار را میکند با این تفاوت که برای عضو ناموجود KeyError میدهد.
اشتراک، اجتماع و تفاضل
مجموعههای پایتون عملیات ریاضی مجموعهها را با عملگرهای کوتاه انجام میدهند:
frontend = {"html", "css", "python"}
backend = {"python", "sql"}
print(sorted(frontend & backend))
print(sorted(frontend | backend))
print(sorted(frontend - backend))['python'] ['css', 'html', 'python', 'sql'] ['css', 'html']
&اشتراک: عضوهایی که در هر دو مجموعهاند.|اجتماع: عضوهایی که دستکم در یکی هستند.-تفاضل: عضوهایی که در اولی هستند و در دومی نیستند.
برای نمایش، دوباره خروجیها را با sorted مرتب کردیم تا مقایسه ساده باشد.
تمرینها
تمرین
تمرین ۱ — شرکتکنندگان مشترک
دو مجموعه از شرکتکنندگان دو کارگاه دارید. تعداد شرکتکنندگان مشترک را حساب کنید و نام آنها را مرتبشده چاپ کنید.
# Write your code hereنمایش راهحل
workshop_a = {"Ali", "Sara", "Reza"}
workshop_b = {"Sara", "Maryam", "Ali"}
common = workshop_a & workshop_b
print(len(common))
print(sorted(common))2 ['Ali', 'Sara']
::: :::
خلاصه
- مجموعه بدون ترتیب و بدون تکرار است؛
set()هر دنبالهای را به مقادیر یکتا فشرده میکند. - آزمون
inروی مجموعه برخلاف لیست، مستقل از اندازه تقریباً فوری است. addاضافه میکند وdiscardحذف میکند؛ افزودن تکراری اثری ندارد.&اشتراک و|اجتماع و-تفاضل را مستقیم حساب میکنند.- عضو مجموعه باید تغییرناپذیر باشد.
دنبالهها را کامل شناختید؛ حالا به مهمترین دنبالهٔ همهٔ برنامهها برمیگردیم: رشته. در درس بعدی ابزارهای پردازش متن در پایتون را عمیق بررسی میکنیم.