آموزش پایتون - مجموعه‌ها

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

در پایتون، مجموعه (set) یک مجموعه غیرترتیبی از عناصر منحصربه‌فرد است. بر خلاف لیست‌ها یا تاپل‌ها، مجموعه‌ها اجازه وجود مقادیر تکراری را نمی‌دهند؛ یعنی هر عنصر در یک مجموعه باید منحصربه‌فرد باشد. مجموعه‌ها تغییرپذیر (mutable) هستند، به این معنی که می‌توانید پس از ایجاد مجموعه، آیتم‌هایی را به آن اضافه یا از آن حذف کنید.

مجموعه‌ها با استفاده از آکولاد {} یا تابع درون‌ساخته set() تعریف می‌شوند. آن‌ها به‌ویژه برای تست عضویت، حذف مقادیر تکراری از یک دنباله، و انجام عملیات‌های ریاضی معمول روی مجموعه‌ها مانند اجتماع، اشتراک و تفاضل مفید هستند.

مجموعه به گروهی از اشیاء متمایز اشاره دارد. از آن برای دسته‌بندی اشیاء کنار هم و بررسی ویژگی‌ها و روابط آن‌ها استفاده می‌شود. به اشیاء موجود در یک مجموعه، عناصر یا اعضای آن مجموعه می‌گویند.

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

ایجاد مجموعه در پایتون به معنای تعریف و مقداردهی اولیه مجموعه‌ای از عناصر منحصربه‌فرد است. این شامل مشخص کردن عناصری است که بخشی از مجموعه خواهند بود، به طوری که اطمینان حاصل شود هر عنصر در مجموعه منحصربه‌فرد است.

شما می‌توانید در پایتون با استفاده از آکولاد {} یا تابع set() یک مجموعه ایجاد کنید −

استفاده از آکولاد

شما می‌توانید با فهرست کردن عناصر داخل آکولاد و جدا کردن هر عنصر با کاما، مستقیماً یک مجموعه تعریف کنید، همان‌طور که در زیر نشان داده شده است −

my_set = {1, 2, 3, 4, 5}
print (my_set)

این کد نتیجه زیر را تولید خواهد کرد −

{1, 2, 3, 4, 5}

استفاده از تابع set()

به عنوان روش جایگزین، می‌توانید با استفاده از تابع set() و پاس دادن یک شیء قابل پیمایش (مانند یک لیست یا تاپل) حاوی عناصری که می‌خواهید در مجموعه بگنجانید، یک مجموعه ایجاد کنید −

my_set = set([1, 2, 3, 4, 5])
print (my_set)

خروجی به صورت زیر به دست می‌آید −

{1, 2, 3, 4, 5}

عناصر تکراری در مجموعه

مجموعه‌ها در پایتون مجموعه‌های غیرترتیبی از عناصر منحصربه‌فرد هستند. اگر سعی کنید مجموعه‌ای با عناصر تکراری ایجاد کنید، تکرارها به طور خودکار حذف می‌شوند −

my_set = {1, 2, 2, 3, 3, 4, 5, 5} 
print (my_set)

نتیجه به دست آمده به صورت زیر است −

{1, 2, 3, 4, 5}

مجموعه‌ها می‌توانند شامل عناصری از انواع داده‌های مختلف باشند، از جمله اعداد، رشته‌ها و حتی مجموعه‌های دیگر (تا زمانی که تغییرناپذیر باشند) −

mixed_set = {1, 'hello', (1, 2, 3)}
print (mixed_set)

نتیجه حاصل شده به شرح زیر است −

{1, 'hello', (1, 2, 3)}

در پایتون، مجموعه‌ها از عملیات پایه مختلفی پشتیبانی می‌کنند که برای دستکاری عناصر آن‌ها استفاده می‌شود. این عملیات شامل افزودن و حذف عناصر، بررسی عضویت، و انجام عملیات‌های مخصوص مجموعه مانند اجتماع، اشتراک، تفاضل و تفاضل متقارن است.

افزودن عناصر به یک مجموعه

برای افزودن یک عنصر به مجموعه، می‌توانید از تابع add() استفاده کنید. این تابع زمانی مفید است که می‌خواهید عناصر جدیدی را به یک مجموعه موجود اضافه کنید. اگر عنصر از قبل در مجموعه وجود داشته باشد، مجموعه بدون تغییر باقی می‌ماند −

my_set = {1, 2, 3, 3}
# Adding an element 4 to the set
my_set.add(4)  
print (my_set)

در ادامه خروجی به دست آمده آمده است −

{1, 2, 3, 4}

حذف عناصر از یک مجموعه

شما می‌توانید یک عنصر را با استفاده از تابع remove() از مجموعه حذف کنید. این تابع زمانی کاربرد دارد که می‌خواهید عناصر خاصی را از مجموعه حذف کنید. اگر عنصر وجود نداشته باشد، خطا از نوع KeyError رخ می‌دهد −

my_set = {1, 2, 3, 4}
# Removes the element 3 from the set
my_set.remove(3)  
print (my_set)

خروجی نمایش داده شده به صورت زیر است −

{1, 2, 4}

به عنوان روش جایگزین، می‌توانید از تابع discard() برای حذف یک عنصر از مجموعه (در صورت وجود) استفاده کنید. بر خلاف remove()، اگر عنصر در مجموعه یافت نشود، discard() خطایی رخ نمی‌دهد −

my_set = {1, 2, 3, 4}
# No error even if 5 is not in the set
my_set.discard(5)  
print (my_set)

خروجی به صورت زیر به دست می‌آید −

{1, 2, 3, 4}

تست عضویت در یک مجموعه

مجموعه‌ها راهکاری کارآمد برای بررسی وجود یک عنصر در مجموعه ارائه می‌دهند. می‌توانید از کلمه کلیدی in برای انجام این بررسی استفاده کنید که اگر عنصر موجود باشد مقدار True و در غیر این صورت False را برمی‌گرداند −

my_set = {1, 2, 3, 4}
if 2 in my_set:
   print("2 is present in the set")
else:
   print("2 is not present in the set")

در ادامه خروجی کد بالا آمده است −

2 is present in the set

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

در پایتون، مجموعه‌ها از عملیات‌های مختلفی پشتیبانی می‌کنند که برای دستکاری و مقایسه مجموعه‌ها استفاده می‌شوند. این عملیات شامل اجتماع، اشتراک، تفاضل، تفاضل متقارن و بررسی زیرمجموعه بودن است. مجموعه‌ها به‌ویژه هنگام کار با مجموعه‌ای از عناصر منحصربه‌فرد و انجام عملیات بر اساس نظریه مجموعه‌ها بسیار مفید هستند.

  • اجتماع (Union) − عناصر هر دو مجموعه را با استفاده از تابع union() یا اپراتور | ترکیب می‌کند.

  • اشتراک (Intersection) − برای به دست آوردن عناصر مشترک با استفاده از تابع intersection() یا اپراتور & استفاده می‌شود.

  • تفاضل (Difference) − برای به دست آوردن عناصری که در یک مجموعه هستند اما در مجموعه دیگر نیستند با استفاده از تابع difference() یا اپراتور - استفاده می‌شود.

  • تفاضل متقارن (Symmetric Difference) − برای به دست آوردن عناصری که در یکی از مجموعه‌ها هستند اما در هر دو نیستند با استفاده از متد symmetric_difference() یا اپراتور ^ استفاده می‌شود.

مجموعه‌سازها در پایتون (Set Comprehensions)

مجموعه‌سازها در پایتون روشی مختصر برای ایجاد مجموعه‌ها بر اساس اشیاء قابل پیمایش هستند، مشابه لیست‌سازها. این قابلیت برای تولید مجموعه‌ها از طریق اعمال یک عبارت روی هر آیتم در یک شیء قابل پیمایش استفاده می‌شود.

مجموعه‌سازها زمانی مفید هستند که نیاز به ایجاد یک مجموعه از نتیجه اعمال یک عملیات یا فیلتر کردن عناصر از یک شیء قابل پیمایش دیگر داشته باشید.

سنتکس (Syntax)

سنتکس مجموعه‌سازها مشابه لیست‌سازها است، اما به جای قلاب [ ]، از آکولاد { } برای نشان دادن مجموعه استفاده می‌کنید −

set_variable = {expression for item in iterable if condition}

مثال

در مثال زیر، با استفاده از مجموعه‌ساز، مجموعه‌ای شامل توان دوم اعدادی از ۱ تا ۵ ایجاد می‌کنیم −

squared_set = {x**2 for x in range(1, 6)}
print(squared_set)

خروجی به دست آمده به صورت زیر است −

{1, 4, 9, 16, 25}

فیلتر کردن عناصر با استفاده از مجموعه‌سازها

می‌توانید عبارات شرطی را در مجموعه‌سازها بگنجانید تا عناصر را بر اساس معیارهای خاصی فیلتر کنید. به عنوان مثال، برای ایجاد مجموعه‌ای از اعداد زوج بین ۱ تا ۱۰، می‌توانید از یک مجموعه‌ساز همراه با شرط if مطابق زیر استفاده کنید −

even_set = {x for x in range(1, 11) if x % 2 == 0}
print(even_set)

این کد خروجی زیر را تولید خواهد کرد −

{2, 4, 6, 8, 10}

مجموعه‌سازهای تو در تو

مجموعه‌سازها از حلقه‌های تو در تو نیز پشتیبانی می‌کنند که به شما امکان می‌دهد از اشیاء قابل پیمایش تو در تو، مجموعه ایجاد کنید. این موضوع می‌تواند برای تولید ترکیب‌ها یا پرموتاسیون‌های مختلف از عناصر مفید باشد.

مثال

nested_set = {(x, y) for x in range(1, 3) for y in range(1, 3)}
print(nested_set)

خروجی کد بالا به صورت زیر نشان داده شده است −

{(1, 1), (1, 2), (2, 1), (2, 2)}

مجموعه‌های غیرقابل تغییر (Frozen Sets)

در پایتون، یک frozen set مجموعه‌ای تغییرناپذیر از عناصر منحصربه‌فرد است؛ مشابه یک مجموعه معمولی اما با این تفاوت که پس از ایجاد نمی‌توان آن را تغییر داد. پس از ایجاد، عناصر داخل یک frozen set را نمی‌توان اضافه، حذف یا ویرایش کرد، که آن را به گزینه‌ای مناسب در صورت نیاز به یک مجموعه تغییرناپذیر تبدیل می‌کند.

شما می‌توانید در پایتون با استفاده از تابع frozenset() و پاس دادن یک شیء قابل پیمایش (مانند لیست، تاپل یا مجموعه‌ای دیگر) حاوی عناصری که می‌خواهید شامل شود، یک frozen set ایجاد کنید.

مثال

در مثال زیر، یک frozen set از اعداد صحیح ایجاد کرده و سپس سعی می‌کنیم یک عنصر به آن اضافه کنیم −

my_frozen_set = frozenset([1, 2, 3])
print(my_frozen_set) 
my_frozen_set.add(4) 

در ادامه خروجی کد بالا آمده است −

frozenset({1, 2, 3})
Traceback (most recent call last):
  File "/home/cg/root/664b2732e125d/main.py", line 3, in <module>
    my_frozen_set.add(4)
AttributeError: 'frozenset' object has no attribute 'add'

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.