🧩 مجموعهها (Sets) در پایتون
مجموعهها (Sets) یکی از ساختارهای داده در پایتون هستند که مانند دیکشنریها، اما بدون کلید، کار میکنند. یک مجموعه، مجموعهای نامرتب از عناصر یکتا (Unique) است که قابل تغییر هستند، اما عناصر داخل آن باید غیرقابل تغییر باشند. مجموعهها برای عملیات ریاضی مانند اشتراک، اجتماع و تفاضل بسیار مناسب هستند.
🔹 تعریف مجموعه
# مجموعه خالی (با set())
empty = set()
print(empty)
# مجموعه با داده
fruits = {"apple", "banana", "cherry"}
print(fruits)
# مجموعه با اعداد تکراری (تکراریها حذف میشوند)
numbers = {1, 2, 2, 3, 3, 3, 4}
print(numbers) # {1, 2, 3, 4}
⏳ برای اجرا دکمه را بزنید...
🔹 تبدیل لیست به مجموعه
با استفاده از set() میتوان یک لیست را به مجموعه تبدیل کرد تا عناصر تکراری حذف شوند.
# حذف تکراریها از یک لیست
my_list = [1, 2, 2, 3, 4, 4, 4, 5]
my_set = set(my_list)
print(f"Original list: {my_list}")
print(f"Set (unique): {my_set}")
# تبدیل مجدد به لیست (با حذف تکراریها)
unique_list = list(my_set)
print(f"Unique list: {unique_list}")
⏳ برای اجرا دکمه را بزنید...
🔹 عملیات روی مجموعه
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# اشتراک (Intersection)
print(set1 & set2) # {4, 5}
print(set1.intersection(set2))
# اجتماع (Union)
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
print(set1.union(set2))
# تفاضل (Difference)
print(set1 - set2) # {1, 2, 3}
print(set1.difference(set2))
# تفاضل متقارن (Symmetric Difference)
print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}
print(set1.symmetric_difference(set2))
⏳ برای اجرا دکمه را بزنید...
🔹 اضافه کردن عناصر
fruits = {"apple", "banana"}
# add: اضافه کردن یک عنصر
fruits.add("cherry")
print(fruits)
# update: اضافه کردن چند عنصر (از لیست، مجموعه، یا هر iterable)
fruits.update(["date", "elderberry"])
print(fruits)
# اضافه کردن یک مجموعه
fruits.update({"fig", "grape"})
print(fruits)
⏳ برای اجرا دکمه را بزنید...
🔹 حذف عناصر
fruits = {"apple", "banana", "cherry", "date"}
# remove: حذف با مقدار (اگر نباشد خطا میدهد)
fruits.remove("banana")
print(fruits)
# discard: حذف با مقدار (اگر نباشد خطا نمیدهد)
fruits.discard("cherry")
print(fruits)
fruits.discard("fig") # خطا نمیدهد
# pop: حذف یک عنصر دلخواه
removed = fruits.pop()
print(f"Removed: {removed}")
print(fruits)
# clear: پاک کردن تمام عناصر
fruits.clear()
print(fruits)
⏳ برای اجرا دکمه را بزنید...
🔹 متدهای مفید مجموعه
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# len: تعداد عناصر
print(f"Length of set1: {len(set1)}")
# in: بررسی عضویت
print(3 in set1) # True
print(10 in set1) # False
# issubset: زیرمجموعه
print({1, 2}.issubset(set1)) # True
print({1, 2}.issubset(set2)) # False
# issuperset: بالامجموعه
print(set1.issuperset({1, 2})) # True
# isdisjoint: اشتراک خالی
print(set1.isdisjoint({6, 7})) # True
print(set1.isdisjoint({4, 5})) # False
⏳ برای اجرا دکمه را بزنید...
🔹 مجموعه غیرقابل تغییر (frozenset)
frozenset نسخه غیرقابل تغییر مجموعه است و میتواند به عنوان کلید دیکشنری استفاده شود.
# ایجاد frozenset
frozen = frozenset([1, 2, 3, 4, 5])
print(frozen)
# frozenset قابل تغییر نیست
# frozen.add(6) # خطا میدهد!
# استفاده به عنوان کلید دیکشنری
my_dict = {frozenset([1, 2]): "value"}
print(my_dict)
# عملیات روی frozenset
frozen2 = frozenset([4, 5, 6])
print(frozen & frozen2) # frozenset({4, 5})
⏳ برای اجرا دکمه را بزنید...
🔹 مجموعههای تو در تو
نکته: عناصر مجموعه باید غیرقابل تغییر باشند، پس نمیتوان یک مجموعه داخل مجموعه دیگر قرار داد (اما میتوان frozenset قرار داد).
# مجموعه از تاپلها (غیرقابل تغییر)
coordinates = {(1, 2), (3, 4), (5, 6)}
print(coordinates)
# استفاده از frozenset به عنوان عضو مجموعه
set1 = {frozenset([1, 2]), frozenset([3, 4])}
print(set1)
# تکرار روی مجموعه
for item in coordinates:
print(f"x: {item[0]}, y: {item[1]}")
⏳ برای اجرا دکمه را بزنید...
🔹 ایجاد مجموعه با Comprehension
# مربع اعداد ۰ تا ۴
squares = {x**2 for x in range(5)}
print(squares)
# فیلتر کردن اعداد زوج
even_squares = {x**2 for x in range(10) if x % 2 == 0}
print(even_squares)
# طول رشتهها
names = ["apple", "banana", "cherry", "date"]
lengths = {len(name) for name in names}
print(lengths)
⏳ برای اجرا دکمه را بزنید...
🔹 مثال جامع: سیستم نظرسنجی
# لیست علاقهمندیهای کاربران
user1 = {"Python", "Data Science", "AI", "Web"}
user2 = {"Data Science", "Machine Learning", "Python"}
user3 = {"Web", "Java", "C++", "Python"}
user4 = {"AI", "Data Science", "Machine Learning"}
# همه علاقهمندیهای منحصر به فرد
all_interests = user1 | user2 | user3 | user4
print(f"All interests: {all_interests}")
# علاقهمندیهای مشترک بین همه کاربران
common_interests = user1 & user2 & user3 & user4
print(f"Common interests: {common_interests}")
# علاقهمندیهایی که فقط کاربر۱ دارد
only_user1 = user1 - (user2 | user3 | user4)
print(f"Only user1: {only_user1}")
# تعداد کل علاقهمندیهای منحصر به فرد
total_interests = len(all_interests)
print(f"Total unique interests: {total_interests}")
# پیشنهاد به کاربر: علاقهمندیهای پرتکرار
# محاسبه تعداد دفعات هر علاقهمندی
interest_count = {}
for interest in all_interests:
count = 0
if interest in user1: count += 1
if interest in user2: count += 1
if interest in user3: count += 1
if interest in user4: count += 1
interest_count[interest] = count
print("\nInterest popularity:")
for interest, count in sorted(interest_count.items(), key=lambda x: x[1], reverse=True):
print(f"{interest}: {count} user(s)")
⏳ برای اجرا دکمه را بزنید...
📌 نکات کلیدی
- ✅ مجموعهها با
{}یاset()تعریف میشوند. - ✅ مجموعهها نامرتب و یکتا هستند.
- ✅ عناصر مجموعه باید غیرقابل تغییر باشند.
- ✅ عملیات اصلی:
&(اشتراک)،|(اجتماع)،-(تفاضل)،^(تفاضل متقارن). - ✅
add()وupdate()برای اضافه کردن عناصر. - ✅
remove()،discard()،pop()وclear()برای حذف عناصر. - ✅
issubset()،issuperset()وisdisjoint()برای بررسی روابط. - ✅
frozensetنسخه غیرقابل تغییر مجموعه است. - ✅
set comprehensionروشی قدرتمند برای ایجاد مجموعهها.