مجموعه‌ها در پایتون

تعریف set، عملیات مجموعه‌ای (اجتماع، اشتراک، تفاضل) و کاربردهای آن

مجموعه (Set) چیست؟

مجموعه (Set) ساختار داده‌ای است که:

تعریف مجموعه

# با آکولاد
fruits = {"سیب", "موز", "پرتقال"}

# با تابع set()
numbers = set([1, 2, 3, 4, 5])

# مجموعه خالی (نکته: {} دیکشنری خالی است!)
empty = set()
{} یک دیکشنری خالی می‌سازد، نه مجموعه! برای مجموعه خالی از set() استفاده کنید.

ویژگی اصلی: حذف تکرارها

numbers = {1, 2, 2, 3, 3, 3, 4}
print(numbers)  # {1, 2, 3, 4} — تکرارها حذف شدند

# حذف تکرار از لیست
my_list = [1, 2, 2, 3, 3, 3, 4, 4]
unique = list(set(my_list))
print(unique)  # [1, 2, 3, 4]

افزودن و حذف

s = {1, 2, 3}

# افزودن
s.add(4)
print(s)  # {1, 2, 3, 4}

# افزودن چندتایی
s.update([5, 6, 7])
print(s)

# حذف
s.remove(1)    # خطا اگر نباشد
s.discard(10)  # خطا نمی‌دهد اگر نباشد
s.pop()        # حذف تصادفی
s.clear()      # خالی کردن

عملیات مجموعه‌ای

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

اجتماع (Union)

A = {1, 2, 3}
B = {3, 4, 5}

# اجتماع
print(A | B)        # {1, 2, 3, 4, 5}
print(A.union(B))   # همان

اشتراک (Intersection)

# اشتراک (عناصر مشترک)
print(A & B)              # {3}
print(A.intersection(B))  # همان

تفاضل (Difference)

# تفاضل (در A ولی نه در B)
print(A - B)              # {1, 2}
print(A.difference(B))    # همان

تفاضل متقارن (Symmetric Difference)

# عناصری که فقط در یکی هستند
print(A ^ B)                       # {1, 2, 4, 5}
print(A.symmetric_difference(B))   # همان

بررسی زیرمجموعه و فوق‌مجموعه

A = {1, 2}
B = {1, 2, 3, 4}

print(A.issubset(B))     # True (A زیرمجموعه B)
print(B.issuperset(A))   # True (B شامل A)

بررسی عضویت

s = {"سیب", "موز", "پرتقال"}
print("موز" in s)  # True
بررسی عضویت در set بسیار سریع‌تر از لیست است (O(1) در برابر O(n)). برای بررسی وجود مقدار در مجموعه‌های بزرگ، از set استفاده کنید!

پیمایش مجموعه

fruits = {"سیب", "موز", "پرتقال"}
for fruit in fruits:
    print(fruit)
# ترتیب تضمین نمی‌شود!

طول مجموعه

s = {1, 2, 3, 4, 5}
print(len(s))  # 5

frozenset — مجموعه تغییرناپذیر

# مجموعه تغییرناپذیر
fs = frozenset([1, 2, 3])
# fs.add(4)  # ❌ خطا!

مثال کاربردی

پیدا کردن مهارت‌های مشترک

dev1_skills = {"Python", "Git", "SQL", "Docker"}
dev2_skills = {"Python", "JavaScript", "Git", "AWS"}

# مهارت‌های مشترک
common = dev1_skills & dev2_skills
print(f"مشترک: {common}")

# همه مهارت‌ها
all_skills = dev1_skills | dev2_skills
print(f"همه: {all_skills}")

# مهارت‌های اختصاصی dev1
unique1 = dev1_skills - dev2_skills
print(f"اختصاصی dev1: {unique1}")

خلاصه

عملیاتعملگرمتد
اجتماعA | BA.union(B)
اشتراکA & BA.intersection(B)
تفاضلA - BA.difference(B)
تفاضل متقارنA ^ BA.symmetric_difference(B)

این مبحث بخشی از دوره آموزش کامل پایتون است.

ابزارهای مرتبط