Set ها در پایتون
۳ سال پیش
Set ها در پایتون
در ادامه ی بررسی مجموعه ها در پایتون به نوع Set می رسیم. Set ها مجموعه هایی نامنظم و index نشده اند و برای نوشتن آن ها باید از curly braces (علامت {}
) استفاده کرد. مثال:
thisset = {"apple", "banana", "cherry"} print(thisset)
همانطور که بالاتر گفتم Set ها نامنظم هستند یعنی هیچ ترتیب خاصی در نمایش آن ها وجود ندارد. به طور مثال کد بالا ممکن است دارای خروجی های زیر باشد:
{'cherry', 'banana', 'apple'}
{'cherry', 'apple', 'banana'}
{'apple', 'banana', 'cherry'}
...و الی آخر
بنابراین در طول این جلسه این موضوع را تکرار نمی کنم و فقط خروجی هایی که برای خودم نمایش داده شده است (یکی از حالات مختلف) را برایتان قرار می دهم. مسئله ی دیگری که از این موضوع استنباط می شود این است که نمی توانیم برای دسترسی به اعضای Set از عدد index آن ها استفاده می کنیم؛ از آنجا که Set ها نامنظم هستند index ای هم ندارند که بخواهیم با آن به اعضای Set دسترسی داشته باشیم. به جای این کار باید با یک حلقه ی for درون Set گردش کنیم و سپس با استفاده از کلیدواژه ی in حضور یا عدم حضور یک عضو را بررسی کنیم:
thisset = {"apple", "banana", "cherry"} for x in thisset: print(x)
مثالی از یک خروجی:
cherry
apple
banana
یا به طور مثال می گوییم آیا banana درون Set موجود است یا خیر:
thisset = {"apple", "banana", "cherry"} print("banana" in thisset)
خروجی مقدار True خواهد بود.
نکته: زمانی که یک Set ساخته شود، امکان ویرایش اعضای قبلی وجود ندارد اما می توانید اعضای جدیدی به آن اضافه کنید.
اضافه کردن اعضا به Set
برای اضافه کردن یک تک عضو به Set بهتر است از متد ()add استفاده کنید اما برای اضافه کردن چندین عضو، تابع ()update کارساز تر است که ما برای هر دو حالت مثالی آورده ایم.
اضافه کردن یک عضو به Set:
thisset = {"apple", "banana", "cherry"} thisset.add("orange") print(thisset)
خروجی:
{'orange', 'cherry', 'apple', 'banana'}
اضافه کردن چندین عضو به Set:
thisset = {"apple", "banana", "cherry"} thisset.update(["orange", "mango", "grapes"]) print(thisset)
خروجی:
{'apple', 'cherry', 'grapes', 'mango', 'banana', 'orange'}
همچنین هر زمان که خواستید تعداد اعضای Set های جدید خود را محاسبه کنید میتوانید به راحتی از همان متد ()len
استفاده کنید:
thisset = {"apple", "banana", "cherry"} print(len(thisset))
خروجی عدد 3 است چرا که 3 عضو در متغیر thisset داریم.
حذف اعضای Set
برای حذف کردن یک عضو از Set از یکی از دو تابع ()remove
و ()discard
استفاده کنید. به طور مثال اگر بخواهیم از ()remove
استفاده کنیم باید بگوییم:
thisset = {"apple", "banana", "cherry"} thisset.remove("banana") print(thisset)
خروجی:
{'apple', 'cherry'}
همانطور که انتظار داشتیم banana حذف شده است. در صورتی که آیتم/عضو اعلام شده توسط شما برای حذف در Set پیدا نشود (وجود نداشته باشد)، تابع ()remove
یک خطا یا error برمی گرداند.
روش دیگر نیز استفاده از ()discard
می باشد:
thisset = {"apple", "banana", "cherry"} thisset.discard("banana") print(thisset)
خروجی:
{'apple', 'cherry'}
اگر عضو پاس داده شده به ()discard
درون Set وجود نداشته باشد (به هر دلیلی) تابع ()discard
برخلاف تابع ()remove
، هیچ خطایی نمایش نخواهد داد.
سوال: آیا می توانیم از متد ()pop
برای حذف اعضای Set استفاده کنیم؟
پاسخ: هم بله و هم نه! همانطور که می دانید ()pop
آخرین عضو را حذف می کند اما از آنجایی که Set ها نامنظم هستند، عنصر آخر همیشه تغییر می کند بنابراین می توانید از ()pop
استفاده کنید اما هیچ وقت نمی فهمید که کدام یک از اعضا را حذف خواهید کرد. به یاد داشته باشید که مقدار برگشت داده شده (returned) از ()pop
همان عضو حذف شده خواهد بود:
thisset = {"apple", "banana", "cherry"} x = thisset.pop() print(x) #removed item print(thisset) #the set after removal
خروجی:
banana
{'apple', 'cherry'}
همچنین تابع ()clear
تمام اعضای Set را حذف میکند اما خود Set را باقی می گذارد. به زبان ساده تر این دستور Set را خالی می کند:
thisset = {"apple", "banana", "cherry"} thisset.clear() print(thisset)
اما از طرف دیگر کلیدواژه ی del (مخفف delete) تمام Set را حذف می کند. در دستور clear خودِ set حذف نمی شود بلکه فقط اعضا حذف می شوند اما با del خود set نیز حذف خواهد شد:
thisset = {"apple", "banana", "cherry"} del thisset print(thisset) #this will raise an error because the set no longer exists
خروجی:
NameError: name 'thisset' is not defined
ادغام Set ها با یکدیگر
راه های مختلفی برای ادغام set ها وجود دارد؛ به طور مثال دستور ()union
دو set را ادغام کرده و نتیجه را در یک set کاملا جدید تحویل می دهد در حالی که دستور ()update
تمام اعضای یک set را گرفته و در set دیگری قرار می دهد.
مثالی از کار با تابع ()union
:
set1 = {"a", "b" , "c"} set2 = {1, 2, 3} set3 = set1.union(set2) print(set3)
خروجی:
{'c', 2, 'b', 'a', 1, 3}
مثالی از کار با دستور ()update
:
set1 = {"a", "b" , "c"} set2 = {1, 2, 3} set1.update(set2) print(set1)
خروجی:
{1, 'a', 'b', 2, 'c', 3}
خروجی هر دو یکی است! فقط ترتیبشان تفاوت دارد که آن هم از طبیعت set است. نکته ی مهمی در این دو مثال وجود دارد: با اینکه در ظاهر هیچ تفاوتی وجود ندارد (به غیر از ترتیب) اما در پشت پرده تفاوت نسبتا مهمی موجود است! در مثال اول مقدار برگشت داده شده در یک set کاملا جدید قرار خواهد گرفت در حالی که در مثال دوم اصل set ها دست خورده و تغییر خواهند کرد.
نکته: هر دو دستور ()update و ()union مقادیر تکراری را وارد set جدید نکرده و آن ها را نادیده می گیرند. البته متدهای دیگری برای کار با set ها وجود دارند که باید در سایت رسمی پایتون سری به آن ها بزنید. به طور مثال ()symmetric_difference تفاوت های بین دو set را به ما برمی گرداند؛ به عبارت دیگر فقط مقادیر غیرتکراری را برمی گردانند.
همچنین شما می توانید از یک constructor به نام ()set
برای ساخت set ها استفاده کنید:
thisset = set(("apple", "banana", "cherry")) print(thisset)
نتیجه می تواند هر کدام از موارد زیر باشد:
{'apple', 'banana', 'cherry'}
{'apple', 'cherry', 'banana'}
{'banana', 'cherry', 'apple'}
... و
این هم از دسته ی سوم مجموعه ها در پایتون... در قسمت بعدی به دسته ی چهارم مجموعه ها در پایتون به نام dictionary میرسیم و مفصلا در مورد آن ها صحبت خواهیم کرد.
هنوز برای این پست نظری ثبت نشده است .