مجموعه ها در برنامه نویسی پایتون
مجموعه ها در برنامه نویسی پایتون
در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، همه چیز را در مورد مجموعه ها در برنامه نویسی پایتون (Python Sets) خواهید آموخت. نحوه ایجاد آنها، افزودن یا حذف عناصر از آنها، و همه عملیات انجام شده روی مجموعه ها در پایتون را یاد خواهید گرفت.
پیشنهاد ویژه : پکیج آموزش طراحی وب سایت با پایتون
مجموعه (set) مجموعه ای غیر مرتب از عناصر است. هر عنصر مجموعه ای منحصر به فرد است (بدون کپی) و تغییرناپذیر می باشد.
با این حال، مجموعه خود قابل تغییر است. ما می توانیم مواردی را از آن اضافه یا حذف کنیم.
مجموعه ها همچنین می توانند برای انجام عملیات های ریاضی مانند اتحاد، اشتراک، تفاضل متقارن و غیره استفاده شوند.
ایجاد مجموعه ها در برنامه نویسی پایتون
یک مجموعه با قرار دادن همه موارد (عناصر) در داخل آکولاد {} ساخته می شود و با کاما عناصر از یکدیگر جدا شده یا با استفاده از تابع توکار ()set ایجاد می شود.
یک مجموعه می تواند هر تعداد آیتم داشته باشد و ممکن است انواع مختلفی داشته باشد (عدد صحیح ، ممیز شناور ، تاپل ، رشته و غیره). اما یک مجموعه نمی تواند عناصر قابل تغییر مانند لیست ها، مجموعه ها یا دیکشنری ها را به عنوان عناصر خود داشته باشد.
1 2 3 4 5 6 7 8 |
# Different types of sets in Python # set of integers my_set = {1, 2, 3} print(my_set) # set of mixed datatypes my_set = {1.0, "Hello", (1, 2, 3)} print(my_set) |
خروجی
1 2 |
{1, 2, 3} {1.0, (1, 2, 3), 'Hello'} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# set cannot have duplicates # Output: {1, 2, 3, 4} my_set = {1, 2, 3, 4, 3, 2} print(my_set) # we can make set from a list # Output: {1, 2, 3} my_set = set([1, 2, 3, 2]) print(my_set) # set cannot have mutable items # here [3, 4] is a mutable list # this will cause an error. my_set = {1, 2, [3, 4]} |
خروجی
1 2 3 4 5 6 |
{1, 2, 3, 4} {1, 2, 3} Traceback (most recent call last): File "<string>", line 15, in <module> my_set = {1, 2, [3, 4]} TypeError: unhashable type: 'list' |
برای ایجاد یک مجموعه خالی باید حقه زیر را به کار برد.
آکولاد {} یک دیکشنری خالی در پایتون ایجاد می کند. برای ساخت یک مجموعه بدون هیچ عنصری، از تابع ()set بدون هیچ آرگومانی استفاده می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Distinguish set and dictionary while creating empty set # initialize a with {} a = {} # check data type of a print(type(a)) # initialize a with set() a = set() # check data type of a print(type(a)) |
خروجی
1 2 |
<class 'dict'> <class 'set'> |
اصلاح مجموعه ها در پایتون
مجموعه ها قابل تغییر هستند. با این حال از آنجا که آنها مرتب نیستند، اندیس گذاری معنایی ندارد.
ما نمی توانیم با استفاده از اندیس گذاری یا برش زدن به عنصری از مجموعه دسترسی پیدا کنیم یا تغییر دهیم. نوع داده تنظیم شده از آن پشتیبانی نمی کند.
با استفاده از روش ()add چندین عنصر و با استفاده از روش () update می توانیم یک عنصر اضافه کنیم. روش () update می تواند تاپل ها، لیست ها، رشته ها یا مجموعه های دیگر را به عنوان آرگومان خود در نظر بگیرد. در همه موارد، از تکرار اجتناب می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# initialize my_set my_set = {1, 3} print(my_set) # if you uncomment line 9, # you will get an error # TypeError: 'set' object does not support indexing # my_set[0] # add an element # Output: {1, 2, 3} my_set.add(2) print(my_set) # add multiple elements # Output: {1, 2, 3, 4} my_set.update([2, 3, 4]) print(my_set) # add list and set # Output: {1, 2, 3, 4, 5, 6, 8} my_set.update([4, 5], {1, 6, 8}) print(my_set) |
خروجی
1 2 3 4 |
{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8} |
حذف عناصر از یک مجموعه
با استفاده از روش های کنار ()discard و ()remove، می توان یک مورد خاص را از مجموعه حذف کرد.
تنها تفاوت این دو در این است که اگر عنصر در مجموعه وجود نداشته باشد، تابع ()discard یک مجموعه را بدون تغییر می گذارد. از طرف دیگر، تابع ()remove در چنین شرایطی خطا ایجاد می کند (اگر عنصر در مجموعه وجود نداشته باشد).
مثال زیر این را نشان می دهد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# Difference between discard() and remove() # initialize my_set my_set = {1, 3, 4, 5, 6} print(my_set) # discard an element # Output: {1, 3, 5, 6} my_set.discard(4) print(my_set) # remove an element # Output: {1, 3, 5} my_set.remove(6) print(my_set) # discard an element # not present in my_set # Output: {1, 3, 5} my_set.discard(2) print(my_set) # remove an element # not present in my_set # you will get an error. # Output: KeyError my_set.remove(2) |
خروجی
1 2 3 4 5 6 7 |
{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2 |
به همین ترتیب، ما می توانیم با استفاده از متد ()pop موردی را حذف و برگردانیم.
از آنجا که مجموعه یک نوع داده مرتب نشده است، هیچ راهی برای تعیین اینکه کدام مورد ظاهر می شود وجود ندارد. کاملاً اختیاری عمل می کند.
همچنین می توانیم با استفاده از متد () clear همه موارد را از یک مجموعه یکجا حذف کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# initialize my_set # Output: set of unique elements my_set = set("HelloWorld") print(my_set) # pop an element # Output: random element print(my_set.pop()) # pop another element my_set.pop() print(my_set) # clear my_set # Output: set() my_set.clear() print(my_set) print(my_set) |
خروجی
1 2 3 4 |
{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set() |
عملیات ریاضی مجموعه عا در برنامه نویسی پایتون
از مجموعه ها می توان برای انجام عملیات ریاضی مانند اتحاد، اشتراک، تفاضل و تفاضل متقارن استفاده کرد. ما می توانیم این کار را با عملگرها یا روش ها انجام دهیم.
اجازه دهید دو مجموعه زیر را برای عملیات زیر در نظر بگیریم.
1 2 |
>>> A = {1, 2, 3, 4, 5} >>> B = {4, 5, 6, 7, 8} |
اتحاد مجموعه در پایتون
اتحاد A و B مجموعه ای از کلیه عناصر هر دو مجموعه است.
اتحاد با استفاده از عملگر | به دست می آید. با استفاده از متد ()union نیز می توان همین کار را انجام داد.
1 2 3 4 5 6 7 8 |
# Set union method # initialize A and B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # use | operator # Output: {1, 2, 3, 4, 5, 6, 7, 8} print(A | B) |
خروجی
1 |
{1, 2, 3, 4, 5, 6, 7, 8} |
مثالهای زیر را در پایتون شل امتحان کنید.
1 2 3 4 5 6 7 |
# use union function >>> A.union(B) {1, 2, 3, 4, 5, 6, 7, 8} # use union function on B >>> B.union(A) {1, 2, 3, 4, 5, 6, 7, 8} |
اشتراک مجموعه در پایتون
اشتراک A و B مجموعه ای از عناصر است که در هر دو مجموعه مشترک است.
اشتراک با استفاده از عملگر & به دست می آید. با استفاده از متد ()intersection می توان همین کار را انجام داد.
1 2 3 4 5 6 7 8 |
# Intersection of sets # initialize A and B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # use & operator # Output: {4, 5} print(A & B) |
خروجی
1 |
{4, 5} |
مثالهای زیر را در پایتون شل امتحان کنید.
1 2 3 4 5 6 7 |
# use intersection function on A >>> A.intersection(B) {4, 5} # use intersection function on B >>> B.intersection(A) {4, 5} |
تفاضل مجموعه ها در پایتون
تفاضل مجموعه B از مجموعه ( A(A – B مجموعه ای از عناصر است که فقط در A است اما در B نیست. به همین ترتیب، B – A مجموعه ای از عناصر در B است اما در A نیست.
تفاضل با استفاده از عملگر – به دست می آید. یا می توان با استفاده از متد ()difference آن رابه دست آورد.
1 2 3 4 5 6 7 8 |
# Difference of two sets # initialize A and B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # use - operator on A # Output: {1, 2, 3} print(A - B) |
خروجی
1 |
{1, 2, 3} |
مثالهای زیر را در پایتون شل امتحان کنید.
1 2 3 4 5 6 7 8 9 10 11 |
# use difference function on A >>> A.difference(B) {1, 2, 3} # use - operator on B >>> B - A {8, 6, 7} # use difference function on B >>> B.difference(A) {8, 6, 7} |
تفاضل متقارن مجموعه ها در پایتون
تفاضل متقارن A و B مجموعه ای از عناصر در A و B است اما نه در هر دو.
تفاضل متقارن با استفاده از عملگر ^ به دست می آید. با استفاده از متد ()symmetric_difference می توان نتیجه مشابهی گرفت.
1 2 3 4 5 6 7 8 |
# Symmetric difference of two sets # initialize A and B A = {1, 2, 3, 4, 5} B = {4, 5, 6, 7, 8} # use ^ operator # Output: {1, 2, 3, 6, 7, 8} print(A ^ B) |
خروجی
1 |
{1, 2, 3, 6, 7, 8} |
مثالهای زیر را در پایتون شل امتحان کنید.
1 2 3 4 5 6 7 |
# use symmetric_difference function on A >>> A.symmetric_difference(B) {1, 2, 3, 6, 7, 8} # use symmetric_difference function on B >>> B.symmetric_difference(A) {1, 2, 3, 6, 7, 8} |
سایر متد های مجموعه ها در برنامه نویسی پایتون
متدهای مجموعه زیادی وجود دارد که بعضی از آنها را قبلاً در بالا استفاده کردیم. در اینجا لیستی از تمام متدهایی مجموعه در دسترس هستند آورده شده است:
متد | توضیح |
---|---|
()add | عنصری را به مجموعه اضافه می کند |
()clear | همه عناصر را از مجموعه حذف می کند |
()copy | کپی از مجموعه را برمی گرداند |
()difference | تفاوت دو یا چند مجموعه را به عنوان یک مجموعه جدید برمی گرداند |
()difference_update | تمام عناصر مجموعه دیگری را از این مجموعه حذف می کند |
()discard | حذف یک عنصر از مجموعه به شرطی که عضو مجموعه باشد |
()intersection | اشتراک دو مجموعه را به عنوان یک مجموعه جدید برمی گرداند |
()intersection_update | مجموعه را با اشتراک خودش و دیگری به روز می کند |
()isdisjoint | اگر دو مجموعه اشتراک تهی داشته باشند True برمی گردد |
()issubset | اگر مجموعه دیگری حاوی این مجموعه باشد، True برمی گردد |
()issuperset | اگر این مجموعه شامل مجموعه دیگری باشد، True برمی گردد |
()pop | یک عنصر مجموعه دلخواه را حذف و برمی گرداند. اگر مجموعه خالی باشد KeyError نشان می دهد |
()remove | یک عنصر را از مجموعه حذف می کند. اگر این عنصر عضو مجموعه نباشد، KeyError نشان می دهد |
()symmetric_difference | تفاضل متقارن دو مجموعه را به عنوان یک مجموعه جدید برمی گرداند |
()symmetric_difference_update | مجموعه ای را با اتفاضل متقارن خود و دیگری به روز می کند |
()union | اشتراک مجموعه ها را در یک مجموعه جدید برمی گرداند |
()update | مجموعه را با اشتراک خود و دیگری به روز می کند |
سایرعملیات های مجموعه در پایتون
تست عضویت مجموعه
ما می توانیم با استفاده از کلیدواژه in آزمایش کنیم که آیا موردی در یک مجموعه وجود دارد یا نه.
1 2 3 4 5 6 7 8 9 10 11 |
# in keyword in a set # initialize my_set my_set = set("apple") # check if 'a' is present # Output: True print('a' in my_set) # check if 'p' is present # Output: False print('p' not in my_set) |
خروجی
1 2 |
True False |
تکرار از طریق یک مجموعه
با استفاده از حلقه for می توانیم هر آیتم مورد نظر در یک مجموعه تکرار کنیم.
1 2 3 4 5 6 7 |
>>> for letter in set("apple"): ... print(letter) ... a p e l |
توابع توکار با مجموعه ها در پایتون
توابع توکار مانند ()
all()
, any()
, enumerate()
, len()
, max()
, min()
, sorted()
, sum
و غیره معمولاً با مجموعه هایی برای انجام کارهای مختلف استفاده می شوند.
Function | Description |
---|---|
()all | اگر همه عناصر مجموعه درست باشد (یا اگر مجموعه خالی باشد) True را برمی گرداند. |
()any | اگر هر عنصری از مجموعه درست باشد، true را برمی گرداند. اگر مجموعه خالی باشد، False را برمی گرداند. |
()enumerate | یک شی شمارش شده را برمی گرداند. این شامل اندیس و مقدار برای همه موارد مجموعه به صورت جفت است. |
()len | طول (تعداد موارد) مجموعه را برمی گرداند. |
()max | بزرگترین مورد مجموعه را برمی گرداند. |
()min | کوچکترین مورد مجموعه را برمی گرداند. |
()sorted | لیست مرتب شده جدیدی را از عناصر موجود در مجموعه برمی گرداند |
()sum | جمع تمام عناصر موجود در مجموعه را برمی گرداند. |
Frozenset
Frozenset کلاس جدیدی است که ویژگی های یک مجموعه را دارد، اما با تعیین عناصر آن نمی توان تغییر داد. در حالی که تاپل ها لیست های غیرقابل تغییر هستند، مجموعه های Frozenset مجموعه های غیرقابل تغییر هستند.
Frozensets را می توان با استفاده از تابع () frozenset ایجاد کرد.
این نوع داده از روشهایی مانند copy()
, difference()
, intersection()
, isdisjoint()
, issubset()
, issuperset()
, symmetric_difference()
and union()
پشتیبانی می کند.
1 2 3 4 |
# Frozensets # initialize A and B A = frozenset([1, 2, 3, 4]) B = frozenset([3, 4, 5, 6]) |
مثالهای زیر را در پایتون شل امتحان کنید.
1 2 3 4 5 6 7 8 9 |
>>> 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' |
لیست جلسات قبل آموزش برنامه نویسی پایتون
- آموزش نصب و اجرای برنامه نویسی پایتون
- کلیدواژه ها و شناسه های برنامه نویسی پایتون
- دستورات، تورفتگی ها و کامنت ها در برنامه نویسی پایتون
- متغیرها، ثابت ها و لیترال ها در برنامه نویسی پایتون
- انواع داده ها در برنامه نویسی پایتون
- تبدیل نوع در برنامه نویسی پایتون
- ورودی، خروجی و وارد کردن در برنامه نویسی پایتون
- عملگرها در برنامه نویسی پایتون
- نام و دامنه در برنامه نویسی پایتون
- دستور شرطی if…else در برنامه نویسی پایتون
- حلقه for در برنامه نویسی پایتون
- حلقه while در برنامه نویسی پایتون
- دستورات break و continue در برنامه نویسی پایتون
- دستور pass در برنامه نویسی پایتون
- توابع در برنامه نویسی پایتون
- آرگومان تابع در برنامه نویسی پایتون
- تابع بازگشتی در برنامه نویسی پایتون
- تابع بی نام/ تابع لامبدا در برنامه نویسی پایتون
- متغیرهای سراسری، محلی و غیر محلی در برنامه نویسی پایتون
- کلیدواژه global در برنامه نویسی پایتون
- ماژول های برنامه نویسی پایتون
- پکیج ها در برنامه نویسی پایتون
- اعداد و تبدیل نوع داده در برنامه نویسی پایتون
- لیست در برنامه نویسی پایتون
- تاپل در برنامه نویسی پایتون
- رشته ها در برنامه نویسی پایتون
دیدگاه شما