آموزش جامع ساختار داده مجموعهای: تعریف، ویژگیهای منحصربهفرد (عناصر یکتا، نامرتب، تغییرپذیر)، متدهای اصلی، عملیات مجموعهای (union, intersection, difference, symmetric_difference)، frozenset، مقایسه با لیست و تاپل — همراه با مثالهای عملی و تمرینات متعدد | آکادمی غیاثی
در پایتون، ست (Set) یک نوع داده مجموعهای است که مانند یک «کیف محتویات» عمل میکند. تفاوت اصلی ست با لیست و تاپل در سه ویژگی کلیدی نهفته است: عناصر یکتا (بدون تکرار)، نامرتب بودن، و تغییرپذیری (اما عناصر داخل ست باید تغییرناپذیر باشند).
in) بسیار سریعتر از لیست است (میانگین O(1) در مقابل O(n)).ستها را به سه روش اصلی میتوان ایجاد کرد: استفاده از آکولاد {}، تابع سازنده set() و تبدیل iterableها به ست.
عناصر را داخل {} قرار داده و با کاما جدا کنید. توجه کنید که آکولادهای خالی یک دیکشنری میسازند، نه ست!
a = {1, 2, 3, 4, 5}
b = {'apple', 'banana', 'cherry'}
c = {1, 'hello', 3.14, True}
print(a)
print(b)
print(c)
set() بسازید: empty_set = set(). استفاده از {} یک دیکشنری خالی میسازد.هر iterable (لیست، تاپل، رشته و ...) را میتوان به ست تبدیل کرد — تکراریها به طور خودکار حذف میشوند.
from_list = set([1, 2, 2, 3, 'apple', 4.5])
from_string = set("GFG")
print(from_list)
print(from_string)
از آنجایی که ستها اندیس ندارند، روش اصلی دسترسی به محتوا، استفاده از حلقهها (که بعداً یاد میگیرید) یا بررسی وجود یک عنصر خاص با عملگر in است. عملگر in روی ستها بسیار سریع است.
a = {10, 20, 30, 40, 50}
print(20 in a) # True
print(60 in a) # False
ستها متدهای متنوعی برای مدیریت عناصر دارند. درک تفاوت remove و discard بسیار مهم است.
a = {10, 20, 30, 40, 50}
a.add(60)
print('add(60):', a)
a.update([70, 80, 90])
print('update:', a)
a.remove(30)
print('remove(30):', a)
a.discard(100) # بدون خطا حتی اگر 100 نباشد
print('discard(100):', a)
popped = a.pop()
print('pop():', popped, '| set بعد:', a)
a.clear()
print('clear():', a)
remove و discard: اگر عنصر وجود نداشته باشد، remove() خطای KeyError میدهد اما discard() هیچ خطایی نمیدهد. pop() یک عنصر دلخواه (نه لزوماً آخرین) را حذف میکند.ستها برای عملیات ریاضی روی مجموعهها بهینه هستند. این عملیات هم به صورت متد و هم به صورت عملگرهای ریاضی قابل استفادهاند.
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
print('Union (اجتماع):', set1.union(set2), 'یا', set1 | set2)
print('Intersection (اشتراک):', set1.intersection(set2), 'یا', set1 & set2)
print('Difference (تفاضل set1 - set2):', set1.difference(set2), 'یا', set1 - set2)
print('Symmetric Difference (تفاضل متقارن):', set1.symmetric_difference(set2), 'یا', set1 ^ set2)
frozenset نسخه تغییرناپذیر ست است. پس از ایجاد، نمیتوان عنصری به آن اضافه یا حذف کرد. مزیت اصلی: چون تغییرناپذیر است، میتوان از آن به عنوان کلید در دیکشنری استفاده کرد.
fs = frozenset([1, 2, 3, 4, 5])
print(fs, type(fs))
student_scores = {
frozenset(['math', 'physics']): 85,
frozenset(['chemistry', 'biology']): 90
}
print(student_scores)
| ویژگی | ست (Set) | لیست (List) | تاپل (Tuple) |
|---|---|---|---|
| تغییرپذیری | تغییرپذیر (اما عناصر باید immutable) | تغییرپذیر | تغییرناپذیر |
| ترتیب عناصر | نامرتب | مرتب | مرتب |
| دسترسی با اندیس | ندارد | دارد | دارد |
| عناصر تکراری | مجاز نیست (خودکار حذف میشوند) | مجاز است | مجاز است |
| نحو تعریف | {1,2,3} یا set() | [1,2,3] | (1,2,3) |
سرعت بررسی عضویت (in) | O(1) (بسیار سریع) | O(n) | O(n) |
unique = set(original_list) سپس در صورت نیاز برگرداندن به لیست.numbers = [1, 2, 2, 3, 4, 4, 5, 5]
unique = set(numbers)
print('حذف تکراری:', unique)
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common = set(list1).intersection(list2)
print('عناصر مشترک:', common)
numbers = [1, 2, 2, 3, 4, 4, 4, 5]
unique_list = list(set(numbers))
print(unique_list)
friends_a = {'ali', 'sara', 'reza'}، friends_b = {'sara', 'reza', 'nima'}). سپس:
friends_a = {'ali', 'sara', 'reza'}
friends_b = {'sara', 'reza', 'nima'}
print('مشترک:', friends_a & friends_b)
print('فقط در گروه اول:', friends_a - friends_b)
print('همه دوستان:', friends_a | friends_b)
allowed_colors = {'قرمز', 'سبز', 'آبی'}. سپس از کاربر یک رنگ بگیرید و اگر رنگ در ست مجاز بود پیام «مجاز است» و در غیر این صورت «مجاز نیست» چاپ کنید.
allowed_colors = {'قرمز', 'سبز', 'آبی'}
color = input('رنگ خود را وارد کنید: ')
if color in allowed_colors:
print('مجاز است')
else:
print('مجاز نیست')
{1,2,3} یا set([1,2,2,3]). ست خالی: set().add()، update()، remove() (خطا اگر نباشد)، discard() (بدون خطا)، pop() (عنصر دلخواه)، clear().union() (|)، intersection() (&)، difference() (-)، symmetric_difference() (^).frozenset نسخه تغییرناپذیر ست — قابل استفاده به عنوان کلید دیکشنری.