مجموعه ها (Set) در پایتون
مجموعه ها مانند لیست و تاپل یک نوع برای ذخیره چندین داده در یک متغییر استفاده می شود، مقادیر موجود در یک مجموعه نامرتب، غیر قابل تغییر و غیر تکراری هستند، نامرتب بودن یعنی در مجموعه ها نمی توان برای مقادیر ترتیب خاصی در نظر گرفت، به شکل کلی در مجموعه ها برخلاف داده هایی مثل لیست ها اندیس (ایندکس) وجود ندارد و نمی توان با اندیس به عناصر یک مجموعه دسترسی داشته باشیم.
مجموعه ها غیر قابل تغییر هستند، به این معنا که چون اندیسی برای دسترسی به مجموعه ها وجود ندارد پس نمی توان آن ها را تغییر داد. البته حذف کردن و یا اضافه کردن عناصر در مجموعه ها امکان پذیر است که در ادامه به نحوه انجام این عملیات خواهیم پرداخت.
عناصر یک مجموعه همواره یکتا هستند، یعنی در یک مجموعه هیچ داده تکراری وجود ندارد. در صورتی که در تعریف یک مجموعه مقادیر تکراری قرار بگیرد پایتون به صورت خودکار فقط یکی از مقادیر را نگاه داشته و باقی را حذف خواهد کرد.
فهرست مطالب
مجموعه ها در پایتون با قرار دادن مقادیر بین آکولاد { } و جدا کردن داده ها با کاما ، از یک دیگر تعریف می شوند.
My_set = { value1 , value2 , value3 , … }
مجموعه ها می توانند از یک نوع داده و یا چندین نوع داده مختلف تشکیل شوند. برای درک بهتر با چند مثال مجموعه را برای شما شرح می دهیم:
>>> my_set = {1 , 2 , 3}
>>> print(my_set)
{1, 2, 3}
>>> my_set = {1.5 , 'Pronesh' , (1 , 2 , 3)}
>>> print(my_set)
{1.5, (1, 2, 3), 'Pronesh'}
به دلیل غیر قابل تغییر بودن مجموعه ها عناصر تشکیل دهنده یک مجموعه نمی توانند شامل داده های قابل تغییر مثل لیست ها و دیکشنری ها باشد.
>>> my_set = {1 , 2 , 3 , 4 , 1 , 4}
>>> print(my_set)
{1, 2, 3, 4}
>>> my_set = {1 , 2 , 3 , [4 , 1]}
Traceback (most recent call last):
File "", line 1, in
TypeError: unhashable type: 'list'
برای تولید یک مجموعه خالی نمی توان از { } خالی استفاده کرد زیرا پایتون آن را به عنوان دیکشنری خالی در نظر می گیرد، برای این کار از تبدیل نوع به شکل زیر استفاده می کنیم.
>>> my_set = {}
>>> print(type(my_set))
>>> my_set = set()
>>> print(type(my_set))
همانطور که مشاهده کردید با استفاده از کلمه کلیدی set به پایتون اعلام می کنیم که هر داده با هر نوعی که در بین پرانتز جلوی set قرار دارد از نوع مجموعه در نظر گرفته شود.
>>> my_set = set("Pronesh.com")
>>> print(my_set)
{'s', 'r', 'c', 'P', 'h', 'n', 'e', 'm', 'o', '.'}
>>> print(type(my_set))
>>> str = 'Pronesh.com'
>>> my_set = set(str)
>>> print(my_set)
{'s', 'r', 'c', 'P', 'h', 'n', 'e', 'm', 'o', '.'}
>>> print(type(my_set))
افزودن عناصر در مجموعه ها
- همانطور که گفتیم عناصر یک مجموعه قابل تغییر نیستند ولی می توان با متد ()add و یا متد ()update به عناصر آن اضافه کرد. با کمک متد update می توان تاپل، لیست، رشته یا مجموعه های دیگر را به یک مجموعه اضافه کرد. باید به خاطر داشته باشید مجموعه ها در هر شرایطی از ایجاد داده تکراری جلو گیری خواهند کرد.
>>> my_set = {1 , 3}
>>> print(my_set)
{1, 3}
>>> my_set.add(2)
>>> print(my_set)
{1, 2, 3}
>>> my_set.add((4,5))
>>> print(my_set)
{1, 2, 3, 4, 5, 6, 8, (4, 5)}
>>> my_set.update([2 , 3 , 4])
>>> print(my_set)
{1, 2, 3, 4}
>>> my_set.update([4 , 5],{1 , 6 , 8})
>>> print(my_set)
{1, 2, 3, 4, 5, 6, 8}
حذف عناصر در مجموعه ها
برای حذف عناصر یک مجموعه از دو متد remove و discard استفاده می شود با این متد ها می توان یک عنصر دلخواه را از مجموعه حذف کرد، تنها تفاوت این دو متد در این است که اگر در خواست حذف یک عنصر را داشته باشیم که آن عنصر در مجموعه وجود نداشته باشد تابع remove اعلام خطا خواهد کرد ولی متد discard مجموعه را بدون تغییر می گذارد و هیچ خطایی اعلام نخواهد کرد.
>>> my_set = {1 , 3 , 4 , 5 , 6}
>>> print(my_set)
{1, 3, 4, 5, 6}
>>> my_set.discard(4)
>>> print(my_set)
{1, 3, 5, 6}
>>> my_set.remove(6)
>>> print(my_set)
{1, 3, 5}
>>> my_set.discard(2)
>>> print(my_set)
{1, 3, 5}
>>> my_set.remove(2)
Traceback (most recent call last):
File "", line 1, in
KeyError: 2
>>> my_set = {1 , 3 , 4 , 5 , 6}
>>> for i in range(1, 5):
set1.remove(i)
>>> print(my_set)
{5 , 6}
روش دیگر برای حذف عناصر یک مجموعه استفاده از متد ()pop می باشد، این متد به صورت خودکار یکی از عناصر مجموعه را حذف می کند و شما هیچ کنترلی بر روی عنصری که انتخاب می شود ندارید، و برعکس لیست ها که کاربر می توانست عنصر مورد نظر خود را برای حذف انتخاب کند در مجموعه ها به خاطر این که دسترسی به اندیس وجود ندارد نمی توان برای متد pop مشخص کرد کدام عنصر حذف شود. به مثال های زیر توجه کنید:
>>> my_set = set('HelloWorld')
>>> print(my_set)
{'o', 'r', 'l', 'W', 'H', 'e', 'd'}
>>> print(my_set.pop())
o
>>> my_set.pop()
'r'
>>> print(my_set)
{'l', 'W', 'H', 'e', 'd'}
همچنین می توان با کمک متد ()clear تمام عناصر یک مجموعه را حذف کرد، به عبارت دیگر این گونه می توان یک مجموعه را خالی نمود:
>>> my_set.clear()
>>> print(my_set)
set()
عملیات بر روی مجموعه ها (set)
همانطور که در ریاضیات با مجموعه ها و عملیات روی آن ها آشنا شدید، در پایتون هم لازم است با نحوه اعمال عملیات بر روی مجموعه ها آشنا شوید، عملیاتی مانند اجتماع (Union)، اشتراک (Intersection)، تفاضل (Difference) و تفاضل متقارن (Symmetric Difference) که در ادامه با تک تک این عملیات و نحوی اجرای آن ها در پایتون آشنا خواهیم شد.
قصد داری با چند مثال شما را با نحوه استفاده از عملیات بر روی مجموعه ها در پایتون آشنا کنیم، در ابتدا با تعریف دو مجموعه که قصد داریم عملیات را بر روی آن ها اجرا کنیم شروع می کنیم :
>>> A = {1 , 2 , 3 , 4 , 5}
>>> B = {4 , 5 , 6 , 7 , 8}
اجتماع (Union) دو مجموعه
همانطور که می دانید اجتماع دو مجموعه (A | B) یعنی ترکیبی از تمام عناصر هر دو مجموعه به شکلی که در آن عنصر تکراری وجود نداشته باشد، به مجموعه حاصل از این ترکیب مجموعه اجتماع گرفته شده از این دو مجموعه می گویند. عملیات اجتماع (union) در پایتون با عملگر (|) یا متد ()union مشخص می شود.
>>> A = {1 , 2 , 3 , 4 , 5}
>>> B = {4 , 5 , 6 , 7 , 8}
>>> print(A | B)
{1, 2, 3, 4, 5, 6, 7, 8}
>>> A.union(B)
{1, 2, 3, 4, 5, 6, 7, 8}
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}
اشتراک (Intersection) دو مجموعه
اشتراک دو مجموعه (A & B) یعنی مجموعه ای ( C ) که از عناصر مشترک بین دو مجموعه اصلی تشکیل شده است. عملیات اجتماع (Intersection) در پایتون با عملگر (&) یا متد ( )intersection مشخص می شود.
>>> A = {1 , 2 , 3 , 4 , 5}
>>> B = {4 , 5 , 6 , 7 , 8}
>>> print(A & B)
{4 , 5}
>>> A.intersection (B)
{4 , 5}
>>> B.intersection (A)
{4 , 5}
تفاضل (Difference) دو مجموعه
تفاضل مجموعه B از مجموعه A را با (A – B) نمایش می دهند و به این معناست که ما مجموعه ای از عناصر مجموعه A داشته باشیم به شکلی که عناصر موجود در مجموعه B در آن وجود نداشته باشند، به عبارت دیگر اگر از مجموعه A عناصر مشترک بین A و B را حذف کنیم حاصل، مجموعه تفاضل B از A بوجود می آید.
عملیات تفاضل (difference) دو مجموعه (A – B) در پایتون با عملگر ( – ) یا متد ( )difference مشخص می شود.
>>> A = {1 , 2 , 3 , 4 , 5}
>>> B = {4 , 5 , 6 , 7 , 8}
>>> print(A - B)
{1 , 2 , 3}
>>> A.difference (B)
{1 , 2 , 3}
>>> B - A
{8 , 6 , 7}
>>> B.difference (A)
{8 , 6 , 7}
تفاضل متقارن (Symmetric Difference) دو مجموعه
تفاضل متقارن دو مجموعه (A ^ B) خیلی شبیه به تفاضل دو مجموعه می باشد با یک تفاوت جزیی، تفاضا متقارن مجموعه A و B یعنی مجموعه ای ( C ) شامل تمام عناصر موجود در مجموعه های A و B به جز عناصر که در هر دو مجموعه به شکل مشترک وجود داند، به عبارتی دیگر تفاضل متقارن یعنی اشتراک دو مجموعه A و B منهای اشتراک این دو مجموعه.
تفاوت تفاضل متقارن با تفاضل دو مجموعه، در همین اجتماع دو مجموعه می باشد، در تفاضل، مجموعه ی حاصل ( C )، از حذف کردن عناصر مشترک دو مجموعه از مجموعه اول ( A ) بدست می آید و عناصر غیر مشترک در مجموعه دوم ( B ) در مجموعه حاصل ( C ) نقشی ندارند، در صورتی که در تفاضل متقارن مجموعه حاصل ( C )، ترکیبی از عناصر هر دو مجموعه می باشد به جز عناصر مشترک آن ها.
عملیات تفاضل متقارن (Symmetric Difference) دو مجموعه (A ^ B) در پایتون با عملگر ( ^ ) یا متد ( )symmetric_difference مشخص می شود.
>>> A = {1 , 2 , 3 , 4 , 5}
>>> B = {4 , 5 , 6 , 7 , 8}
>>> print(A ^ B)
{1 , 2 , 3 , 6 , 7 , 8}
>>> A.symmetric_difference(B)
{1 , 2 , 3 , 6 , 7 , 8}
>>> B.symmetric_difference(A)
{1 , 2 , 3 , 6 , 7 , 8}
بررسی عضویت یک مجموعه در پایتون
عضویت یا بررسی وجود یک عنصر در یک مجموعه، با کمک کلمه کلیدی in به شکل زیر انجام می شود :
>>> my_set = {'apple'}
>>> print('a' in my_set)
False
>>> print('p' not in my_set)
True
متد های مجموعه ها در پایتون
برای مجموعه ها متد های مختلفی طراحی و در نظر گرفته شده، که قبلا برخی از آن ها را بررسی و استفاده نموده ایم، جدول زیر لیستی از تمام متد های مورد استفاده در مجموعه ها را برای شما به نمایش گذاشته است.
توابع مجموعه ها در پایتون
مجموعه های منجمد (frozenset)
مجموعه های منجمد یک نوع داد با ویژگی های مجموعه ها می باشند با این تفاوت که عناصر آنها غیر قابل تغییر است، همانطور که تاپل ها لیست های غیر قابل تغییر هستند، مجموعه های منجمد نیز مجموعه های غیر قابل تغییر می باشند.
مجموعه های بخاطر قابلیت تغییری که دارند قابل Hash نیستند بنابراین نمی توانن به عنوان کلید های دیکشنری ها استفاده شوند، ولی مجموعه های منجمد بخاطر خاصیت غیر قابل تغییر بودنشان قابل Hash شدن هستند و می توانند به عنوان کلید های دیکشنری ها مورد استفاده قرار گیرند. به چند مثال از نحوه تعریف و استفاده از مجموعه های منجمد توجه فرمایید :
>>> A = frozenset([1, 2, 3, 4])
>>> B = frozenset([3, 4, 5, 6])
>>> A.isdisjoint(B)
False
>>> A.difference(B)
frozenset({1, 2})
>>> A | B
frozenset({1, 2, 3, 4, 5, 6})
>>> A.add(3)
AttributeError: 'frozenset' object has no attribute 'add'
دیدگاهتان را بنویسید