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

به زبان ساده، Set مجموعه‌ای از عناصر منحصربه‌فرد (Unique) است که ترتیب مشخصی ندارد و اجازه ذخیره عناصر تکراری را نمی‌دهد.

students = {"Ali", "Sara", "Reza"}
print(students)

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

{'Sara', 'Ali', 'Reza'}

دقت کنید که ترتیب نمایش عناصر ممکن است در هر بار اجرای برنامه متفاوت باشد، زیرا مجموعه‌ها ترتیب ثابتی ندارند.

فهرست مطالب

ویژگی‌های Set

مجموعه‌ها چند ویژگی مهم دارند:

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

به همین دلیل، Set برای حذف داده‌های تکراری و مقایسه مجموعه‌ها بسیار کاربردی است.

ایجاد مجموعه (Creating Sets)

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

ایجاد مجموعه با آکولاد

رایج‌ترین روش، استفاده از آکولاد است.

fruits = {"Apple", "Banana", "Orange"}
print(fruits)

خروجی:

{'Apple', 'Orange', 'Banana'}

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

گاهی اطلاعات ما در قالب یک لیست قرار دارد، اما می‌خواهیم تمام مقادیر تکراری را حذف کنیم. در این حالت کافی است از تابع set() استفاده کنیم.

numbers = [10, 20, 30, 20, 40, 10, 50]
unique_numbers = set(numbers)
print(unique_numbers)

خروجی:

{40, 10, 50, 20, 30}

همان‌طور که می‌بینید، اعداد تکراری (10 و 20) فقط یک بار در مجموعه باقی مانده‌اند.

ایجاد مجموعه از روی رشته (String)

هر کاراکتر رشته به یک عضو از مجموعه تبدیل می‌شود.

text = "python"
letters = set(text)
print(letters)

خروجی:

{'t', 'h', 'o', 'n', 'y', 'p'}

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

مثال:

text = "programming"
print(set(text))

خروجی (ممکن است ترتیب متفاوت باشد):

{'r', 'i', 'm', 'g', 'a', 'p', 'o', 'n'}

حرف g و m چند بار در رشته وجود دارند، اما در مجموعه فقط یک بار ذخیره شده‌اند.

ایجاد مجموعه از روی تاپل

تابع set() می‌تواند تاپل را نیز به مجموعه تبدیل کند.

numbers = (1, 2, 3, 2, 4, 1)
result = set(numbers)
print(result)

خروجی:

{1, 2, 3, 4}

ایجاد مجموعه خالی

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

my_set = {}
print(type(my_set))

خروجی:

<class 'dict'>

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

my_set = set()
print(type(my_set))

خروجی:

<class 'set'>

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

حذف خودکار اعضای تکراری

یکی از مهم‌ترین ویژگی‌های Set این است که اعضای تکراری را به‌صورت خودکار حذف می‌کند.

numbers = {10, 20, 30, 20, 10, 40}
print(numbers)

خروجی:

{40, 10, 20, 30}

اضافه کردن اعضا به Set

در پایتون برای اضافه کردن عضو جدید به یک مجموعه از متد add() استفاده می‌کنیم.

استفاده از add()

متد add() یک مقدار جدید به مجموعه اضافه می‌کند.

languages = {"Python", "Java", "C++"}
languages.add("JavaScript")
print(languages)

خروجی:

{'Python', 'Java', 'C++', 'JavaScript'}

در این مثال، زبان برنامه‌نویسی JavaScript به مجموعه اضافه شده است.

اضافه کردن مقدار تکراری

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

numbers = {1, 2, 3}
numbers.add(2)
print(numbers)

خروجی:

{1, 2, 3}

چون Set اجازه ذخیره مقدار تکراری را نمی‌دهد، عدد 2 دوباره اضافه نمی‌شود.

اضافه کردن چند عضو با update()

اگر بخواهیم چند مقدار را همزمان به یک مجموعه اضافه کنیم، از متد update() استفاده می‌کنیم.

colors = {"Red", "Blue"}
colors.update(["Green", "Yellow", "Black"])
print(colors)

خروجی:

{'Red', 'Blue', 'Green', 'Yellow', 'Black'}

تابع update() می‌تواند چندین مقدار را از یک لیست، تاپل یا مجموعه دیگر دریافت کند.

مثال:

set1 = {1, 2, 3}
set1.update((4, 5, 6))
print(set1)

خروجی:

{1, 2, 3, 4, 5, 6}

حذف اعضای Set

برای حذف اعضای مجموعه چند روش وجود دارد که هر کدام کاربرد خاصی دارند.

حذف با remove()

متد remove() یک عضو مشخص را از مجموعه حذف می‌کند.

fruits = {"Apple", "Banana", "Orange"}
fruits.remove("Banana")
print(fruits)

خروجی:

{'Apple', 'Orange'}

اما اگر عضوی که می‌خواهیم حذف کنیم وجود نداشته باشد، برنامه با خطا متوقف می‌شود.

fruits.remove("Mango")

خروجی:

KeyError

حذف با discard()

متد discard() مانند remove() عمل می‌کند، اما اگر عضو وجود نداشته باشد، خطا ایجاد نمی‌کند.

fruits = {"Apple", "Banana", "Orange"}
fruits.discard("Mango")
print(fruits)

خروجی:

{'Apple', 'Banana', 'Orange'}

به همین دلیل در برنامه‌های واقعی، معمولا discard() انتخاب امن‌تری است.

حذف اعضای Set با pop()

متد pop() یک عضو را از مجموعه حذف می‌کند و همان عضو حذف‌شده را برمی‌گرداند. اما یک نکته مهم وجود دارد:

چون Set ترتیب مشخصی ندارد، نمی‌توانیم مشخص کنیم کدام عضو حذف می‌شود.

numbers = {10, 20, 30, 40}
removed = numbers.pop()
print(removed)
print(numbers)

خروجی ممکن است مثلا باشد:

10
{20, 30, 40}

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

پاک کردن تمام اعضای Set با clear()

اگر بخواهیم تمام اعضای یک مجموعه را حذف کنیم، از متد clear() استفاده می‌کنیم.

students = {"Ali", "Sara", "Reza"}
students.clear()
print(students)

خروجی:

set()

بعد از اجرای clear()، مجموعه همچنان وجود دارد اما هیچ عضوی داخل آن نیست.

بررسی وجود یک عضو در Set

برای بررسی اینکه آیا یک مقدار داخل مجموعه وجود دارد یا خیر، از عملگر in استفاده می‌کنیم.

مثال:

languages = {"Python", "Java", "C++"}
print("Python" in languages)

خروجی:

True

چون Python در مجموعه وجود دارد.

مثال :

languages = {"Python", "Java", "C++"}
print("PHP" in languages)

خروجی:

False

چون PHP عضو این مجموعه نیست.

استفاده از not in

برای بررسی نبودن یک عضو در مجموعه می‌توانیم از not in استفاده کنیم.

students = {"Ali", "Sara", "Reza"}
if "Mohammad" not in students:
    print("Student not found")

خروجی:

Student not found
نکته مهم درباره Set

برخلاف List، در Set نمی‌توانیم با شماره اندیس به اعضا دسترسی داشته باشیم. مثلاً این کد اشتباه است:

numbers = {10, 20, 30}
print(numbers[0])

خروجی:

TypeError

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

اجتماع، اشتراک و تفاضل مجموعه‌ها (Set Operations)

یکی از ویژگی‌های قدرتمند Set در پایتون، امکان انجام عملیات ریاضی روی مجموعه‌ها است. این عملیات زمانی کاربرد دارند که بخواهیم دو گروه از داده‌ها را با هم مقایسه کنیم. برای مثال:

  • دانش‌آموزان شرکت‌کننده در کلاس پایتون
  • دانش‌آموزان شرکت‌کننده در کلاس طراحی وب

می‌توانیم بررسی کنیم:

  • چه افرادی در هر دو کلاس هستند؟
  • چه افرادی فقط در یک کلاس حضور دارند؟
  • مجموع افراد هر دو کلاس چند نفر است؟

اجتماع مجموعه‌ها (Union)

عملیات Union تمام اعضای دو مجموعه را ترکیب می‌کند و اعضای تکراری را فقط یک بار نگه می‌دارد. برای انجام اجتماع از متد union() یا علامت | استفاده می‌کنیم.

مثال:

python_students = {"Ali", "Sara", "Reza"}
web_students = {"Sara", "Mina", "Hamed"}
all_students = python_students.union(web_students)
print(all_students)

خروجی:

{'Ali', 'Sara', 'Reza', 'Mina', 'Hamed'}

دانش‌آموز Sara در هر دو مجموعه وجود داشت، اما فقط یک بار ذخیره شد.

روش دوم با استفاده از عملگر |:

all_students = python_students | web_students
print(all_students)

اشتراک مجموعه‌ها (Intersection)

عملیات Intersection فقط اعضای مشترک بین دو مجموعه را برمی‌گرداند. برای این کار از متد intersection() یا علامت & استفاده می‌کنیم.

مثال:

python_students = {"Ali", "Sara", "Reza"}
web_students = {"Sara", "Mina", "Hamed"}
common_students = python_students.intersection(web_students)
print(common_students)

خروجی:

{'Sara'}

در این مثال فقط Sara در هر دو کلاس حضور دارد.

روش دوم:

common_students = python_students & web_students

تفاضل مجموعه‌ها (Difference)

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

مثال:

python_students = {"Ali", "Sara", "Reza"}
web_students = {"Sara", "Mina", "Hamed"}
result = python_students.difference(web_students)
print(result)

خروجی:

{'Ali', 'Reza'}

یعنی دانش‌آموزانی که فقط در کلاس پایتون هستند.

اگر ترتیب مجموعه‌ها را تغییر دهیم، نتیجه هم تغییر می‌کند:

result = web_students - python_students
print(result)

خروجی:

{'Mina', 'Hamed'}

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

این عملیات اعضایی را برمی‌گرداند که فقط در یکی از دو مجموعه وجود دارند، اما اعضای مشترک را حذف می‌کند. از متد symmetric_difference() یا علامت ^ استفاده می‌کنیم.

مثال:

python_students = {"Ali", "Sara", "Reza"}
web_students = {"Sara", "Mina", "Hamed"}
result = python_students.symmetric_difference(web_students)
print(result)

خروجی:

{'Ali', 'Reza', 'Mina', 'Hamed'}

چون Sara در هر دو مجموعه وجود داشت، حذف شد.

پیمایش Set با حلقه for

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

مثال:

colors = {"Red", "Blue", "Green", "Yellow"}
for color in colors:
    print(color)

خروجی:

Green
Red
Yellow
Blue

ممکن است خروجی در اجرای بعدی با ترتیب دیگری نمایش داده شود.

استفاده از شرط داخل حلقه Set

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

مثال:

numbers = {5, 10, 15, 20, 25}
for number in numbers:
    if number > 15:
        print(number)

خروجی:

20
25

در این مثال فقط اعدادی چاپ می‌شوند که بزرگ‌تر از ۱۵ هستند.

تعداد اعضای Set با len()

برای به دست آوردن تعداد اعضای یک مجموعه از تابع len() استفاده می‌کنیم.

مثال:

students = {"Ali", "Sara", "Reza", "Mina"}
print(len(students))

خروجی:

4

تبدیل Set به List

گاهی نیاز داریم به اعضای مجموعه با استفاده از اندیس دسترسی داشته باشیم. چون Set اندیس ندارد، ابتدا باید آن را به List تبدیل کنیم. برای این کار از تابع list() استفاده می‌کنیم.

مثال:

numbers = {10, 20, 30, 40}
numbers_list = list(numbers)
print(numbers_list)

خروجی:

[40, 10, 20, 30]

حالا می‌توانیم از اندیس استفاده کنیم:

print(numbers_list[0])

خروجی:

40

تفاوت Set با List، Tuple و Dictionary

ویژگی List Tuple Set Dictionary
ترتیب دارد بله بله خیر بله
قابل تغییر است بله خیر بله بله
مقدار تکراری قبول می‌کند بله بله خیر کلیدها خیر
دسترسی با اندیس بله بله خیر با کلید
کاربرد اصلی ذخیره لیست اطلاعات داده‌های ثابت داده‌های یکتا و عملیات مجموعه‌ها ذخیره اطلاعات به صورت کلید-مقدار

✏️ تمرین 1

لیست زیر شامل نام کاربران ثبت‌شده در سایت است. با استفاده از set() کاربران تکراری را حذف کنید و تعداد کاربران یکتا را نمایش دهید.

users = ["Ali", "Sara", "Ali", "Reza", "Sara", "Mina"]

خروجی باید شامل نام‌های بدون تکرار و تعداد آن‌ها باشد.

✏️ تمرین 2

یک Set از نام کاربران ثبت‌نام‌شده ایجاد کنید. سپس یک نام از کاربر دریافت کنید و بررسی کنید که آیا در مجموعه وجود دارد یا خیر.

registered_users = {"ali", "sara", "reza", "mina"}

اگر کاربر وجود داشت عبارت Welcome و در غیر این صورت عبارت User not found چاپ شود.

✏️ تمرین 3

دو کلاس پایتون و هوش مصنوعی داریم. مشخص کنید چه دانش‌آموزانی در هر دو کلاس شرکت کرده‌اند.

python_class = {"Ali", "Sara", "Reza", "Mina"}

ai_class = {"Sara", "Mina", "Hamed"}

از عملیات intersection() یا علامت & استفاده کنید.

✏️ تمرین 4

دو گروه از دانش‌آموزان داریم. مشخص کنید چه افرادی فقط در گروه اول هستند.

group1 = {"Ali", "Sara", "Reza", "Mina"}

group2 = {"Sara", "Mina", "Hamed"}

از عملیات تفاضل مجموعه‌ها استفاده کنید.

✏️ تمرین 5

یک جمله از کاربر دریافت کنید و تعداد کلمات غیرتکراری آن را نمایش دهید.

text = "python is easy and python is powerful"

راهنمایی: متن را با split() به لیست تبدیل کنید و سپس با set() کلمات تکراری را حذف کنید.

توابع در پایتون

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

گام بعدی : توابع در پایتون

برای شرکت در آزمون آماده‌اید؟

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

شروع کار با Django

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

ادامه مطلب »

عملیات CRUD در SQLite

عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.

ادامه مطلب »

توابع در پایتون

توابع در پایتون اگر هنگام برنامه‌نویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و

ادامه مطلب »

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

مجموعه (Set) در پایتون به زبان ساده، Set مجموعه‌ای از عناصر منحصربه‌فرد (Unique) است که ترتیب مشخصی ندارد و اجازه

ادامه مطلب »

تاپل در پایتون

تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی

ادامه مطلب »

لیست در پایتون

لیست (List) در پایتون پرکاربردترین ساختار داده​ تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود

ادامه مطلب »

آموزش نصب پایتون

آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفته‌اید برنامه‌نویسی را یاد بگیرید، احتمالاً نام زبان

ادامه مطلب »