مجموعهها (Sets) در پایتون و کاربرد آنها در ریاضیات
در دنیای برنامهنویسی، گاهی با دادههایی سروکار داریم که تکراری بودن یا ترتیب قرارگیری آنها برایمان اهمیتی ندارد؛ بلکه تنها «حضور» یک عضو در مجموعه مهم است. اگر با نظریه مجموعهها در ریاضیات دوران مدرسه آشنا باشید، درک ساختمان داده مجموعه (Set) در پایتون برایتان بسیار ساده خواهد بود.
در این مقاله از بخش «ساختمان دادهها» در پای شو، به بررسی دقیق Set در پایتون میپردازیم و میبینیم که چگونه میتوانیم عملیاتهای جذاب ریاضی را به کمک آنها در کدهایمان پیادهسازی کنیم.
مجموعه (Set) در پایتون چیست؟
مجموعه یا Set در پایتون، یک ساختمان داده برای ذخیره عناصر یکتا (بدون تکرار) و بدون ترتیب (Unordered) است. این یعنی برخلاف لیستها و تاپلها، عناصر داخل یک Set ایندکسگذاری نمیشوند و شما نمیتوانید با استفاده از شماره ایندکس (مثلاً my_set[0]) به آنها دسترسی پیدا کنید.
سه ویژگی کلیدی مجموعهها:
۱. یکتایی (Uniqueness): یک مجموعه هرگز نمیتواند دو عضو تکراری داشته باشد. اگر داده تکراری وارد کنید، پایتون به صورت خودکار آن را نادیده میگیرد. ۲. بدون ترتیب بودن: هنگام چاپ یا پیمایش یک مجموعه، ترتیب عناصر ممکن است با ترتیبی که شما وارد کردهاید متفاوت باشد. ۳. تغییرپذیری کلی، اما اعضای ثابت: خود Set قابل تغییر است (میتوانید عضو اضافه یا کم کنید)، اما اعضای داخل آن باید از نوع دادههای تغییرناپذیر (Immutable) مانند رشته، عدد یا تاپل باشند. (شما نمیتوانید یک لیست را درون یک Set قرار دهید).
نحوه ساخت مجموعه در پایتون
برای ساخت یک مجموعه، مقادیر را درون آکولاد {} قرار میدهیم.
# ساخت یک مجموعه از اعداد
numbers = {1, 2, 3, 4, 5}
print(numbers)
# رفتار مجموعه با دادههای تکراری
duplicate_set = {1, 2, 2, 3, 3, 3, 4}
print(duplicate_set) # خروجی: {1, 2, 3, 4} (تکراریها حذف شدند)
نکته بسیار مهم: برای ساخت یک مجموعه خالی، نمیتوانید از {} استفاده کنید، زیرا پایتون آن را به عنوان یک «دیکشنری خالی» در نظر میگیرد. برای ساخت Set خالی باید از تابع سازنده آن استفاده کنید:
empty_set = set()
کاربرد مجموعهها در ریاضیات (عملیاتهای اصلی)
قدرت واقعی Setها در پایتون، زمانی خود را نشان میدهد که بخواهیم عملیاتهای منطقی و ریاضی را روی دو یا چند گروه از دادهها انجام دهیم. فرض کنید دو مجموعه از دانشآموزان داریم؛ گروه الف (علاقهمند به ریاضی) و گروه ب (علاقهمند به فیزیک).
math_students = {"علی", "رضا", "سارا", "مریم"}
physics_students = {"سارا", "محمد", "علی", "حسین"}
۱. اجتماع (Union)
اجتماع دو مجموعه یعنی ترکیب تمام اعضای هر دو مجموعه (بدون در نظر گرفتن تکراریها). برای این کار از عملگر | یا متد union() استفاده میشود.
all_students = math_students | physics_students
# یا: math_students.union(physics_students)
print(all_students)
# خروجی شامل تمام دانشآموزان هر دو کلاس است (بدون نام تکراری).
۲. اشتراک (Intersection)
اشتراک یعنی پیدا کردن اعضایی که در هر دو مجموعه حضور دارند. برای این کار از عملگر & یا متد intersection() استفاده میشود.
both_subjects = math_students & physics_students
# یا: math_students.intersection(physics_students)
print(both_subjects)
# خروجی: {'سارا', 'علی'} (کسانی که هم به ریاضی و هم فیزیک علاقه دارند)
۳. تفاضل (Difference)
تفاضل مجموعه A از B، یعنی اعضایی که فقط در A هستند اما در B وجود ندارند. برای این کار از عملگر - یا متد difference() استفاده میکنیم.
only_math = math_students - physics_students
# یا: math_students.difference(physics_students)
print(only_math)
# خروجی: {'مریم', 'رضا'} (کسانی که فقط ریاضی دوست دارند، نه فیزیک)
۴. تفاضل متقارن (Symmetric Difference)
تفاضل متقارن دقیقاً برعکس اشتراک است؛ یعنی اعضایی که در یکی از مجموعهها هستند، اما در هر دو مشترک نیستند (فقط در یک کلاس ثبتنام کردهاند). از عملگر ^ یا متد symmetric_difference() استفاده میشود.
one_subject_only = math_students ^ physics_students
# یا: math_students.symmetric_difference(physics_students)
print(one_subject_only)
# خروجی: {'مریم', 'رضا', 'محمد', 'حسین'}
کاربردهای روزمره Set در برنامهنویسی
جدا از مفاهیم ریاضی، مجموعهها در برنامهنویسی روزمره پایتون دو کاربرد فوقالعاده مهم دارند:
۱. حذف سریع دادههای تکراری از یک لیست
اگر لیستی شامل هزاران داده دارید و میخواهید تکراریها را حذف کنید، سادهترین و سریعترین راه، تبدیل آن لیست به یک مجموعه و سپس بازگرداندن آن به شکل لیست است:
my_list = [10, 20, 10, 30, 40, 20, 50]
unique_list = list(set(my_list))
print(unique_list) # خروجی: [40, 10, 50, 20, 30]
۲. بررسی سریع عضویت (Membership Testing)
پایتون برای بررسی اینکه آیا یک عنصر در یک لیست وجود دارد یا خیر (استفاده از عملگر in)، باید تکتک عناصر لیست را بررسی کند که زمانبر است. اما در مجموعهها، به لطف الگوریتمهای Hash، بررسی عضویت با سرعت نور انجام میشود (پیچیدگی زمانی O(1)). بنابراین اگر نیاز به جستجوی مداوم در یک پایگاه داده بزرگ از کلمات یا شناسهها دارید، حتماً آنها را در یک Set ذخیره کنید.
جمعبندی
مجموعهها (Sets) در پایتون ابزارهایی بسیار سریع و کارآمد برای مدیریت دادههای غیرتکراری هستند. هرگاه در پروژه خود نیاز داشتید عملیاتهای ریاضی مانند اشتراک و اجتماع را پیادهسازی کنید، یا قصد داشتید دادههای تکراری را فیلتر کنید و جستجوی سریعی داشته باشید، مجموعهها بهترین انتخاب شما در میان ساختمانهای داده خواهند بود.

بدون دیدگاه