• ارسال کننده: سمیه مظفری
  • تاریخ انتشار: 2019 / 10 / 12

آموزش زبان پایتون – ساختار داده ای مجموعه (set)

مقاله قبلی: دیکشنری و نحوه ایجاد آن در زبان برنامه نویسی پایتون

در این مقاله شما اطلاعاتی را در خصوص ساختار داده ای مجموعه ها (مجموعه ها) خواهید آموخت. اطلاعاتی از قبیل ایجاد مجموعه ها، اضافه کردن آیتم هایی به مجموعه ها، حذف آیتم های یک مجموعه و سایر عملیات مربوط به مجموعه ها.

نوع داده مجموعه و نحوه ایجاد آن

set ها به مجموعه ای از داده های نا مرتب و unindexed گفته می شود. درحقیقت همان طور که در ریاضیات آموختیم مجموعه به دسته ای از اشیاء متمایز با هم گفته می شود به طوری که ترتیب قرار گیری عناصر اهمیتی ندارد.

نوع داده مجموعه و نحوه ایجاد آن

 برخلاف خود مجموعه که تغییر پذیر است یعنی می توان عناصری را به آن اضافه نمود یا از آن حذف کرد، اعضای یک مجموعه منحصر به فرد هستند و نباید تغییر کنند. این نوع ساختار داده می تواند دارای هر تعداد داده ای باشند. علاوه بر این اعضای مجموعه می تواند از هر نوعی باشند (عدد صحیح، اعشاری، تاپل ، رشته و غیره). اما نمی توان از دیکشنری ها و لیست ها به عنوان اعضای پایتون استفاده کرد. چون این دو نوع داده تغییر پذیر هستند.

اعضای یک مجموعه در درون یک جفت براکت مجعد { } قرار گرفته و با علامت کاما از هم جدا می شوند. در مثال های زیر می توانید مجموعه هایی را ببینید که همه اعضای آن از نوع رشته، عدد و یا ترکیبی از عدد اعشاری و رشته و تاپل هستند.

اعضای یک مجموعه منحصر به فرد هستند

مجموعه ها نمی توانند دارای اعضای تکراری باشند و در صورت استفاده از مقادیر تکراری در آن ها، آیتم های تکراری حذف می شوند. مثلا در قطعه کد زیر می بینید که نسخه های تکراری داده ها به طور خودکار نادیده گرفته می شوند. هم چنین شما مجاز به قرار دادن لیست ها و دیکشنری ها در داخل مجموعه نیستید و در صورت عدم رعایت این موضوع، با خطای TypeError مواجه خواهید شد.

خطای TypeError در ساختار داده ای مجموعه

علاوه بر این شما می توانید با استفاده از تابع سازنده مجموعه، نیز مجموعه مورد نظر خود را ایجاد کنید. در این روش باید اعضای مجموعه را به جای براکت مجعد در داخل دو علامت پرانتز قرار دهید.

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

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

از آن جا که اعضای یک مجموعه در داخل براکت مجعد قرار می گیرند، شاید اگر از شما بپرسیم که یک مجموعه خالی را چگونه ایجاد می کنند بگویید که با یک جفت براکت مجعد {}. اما این طور نیست. چرا که یک جفت براکت مجعد در پایتون یک دیکشنری خالی ایجاد می کند نه مجموعه خالی. بنابراین برای این کار باید از تابع مجموعه بدون هیچ گونه آرگومانی استفاده کنید. برای اطمینان از این موضوع، می توانید همانند مثال زیر از تابع type استفاده کنید.

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

نحوه دسترسی به اعضای یک مجموعه

از آن جا که مجموعه ها، نوع داده نا مرتب هستند بنابراین نمی شود توسط اندیس به اعضای آن دسترسی پیدا کرد (دسترسی با اندیس، منجر به خطای TypeErrorمی شود)  اما می توان توسط یک حلقه for تمامی اعضای یک مجموعه را پیمایش نمود و عملیات مورد نظر را روی آن ها انجام داد. همین طور مشابه لیست ها، دیکشنری ها، تاپل ها و رشته ها، می توانید با استفاده از عملگر و کلمه کلیدی in، حضور یا عدم حضور عنصری را در یک مجموعه مورد بررسی قرار دهید.

نحوه دسترسی به اعضای یک مجموعه در پایتون

تغییر اعضای یک مجموعه

وقتی یک مجموعه ایجاد کردید دیگر نمی توانید اعضای آن را تغییر دهید با این حال، می توانید عناصر جدیدی به آن اضافه کنید.

نحوه اضافه کردن آیتم به یک مجموعه

اگر قصد اضافه کردن یک عنصر را دارید از تابع add() و در صورتی که می خواهید بیش از یک عنصر را اضافه کنید از تابع update() استفاده کنید.

نحوه اضافه کردن آیتم به یک مجموعه

محاسبه طول مجموعه

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

محاسبه طول مجموعه

حذف یک آیتم

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

حذف یک آیتم در مجموعه

شما برای حذف یک عنصر، می توانید از تابع pop() نیز استفاده کنید مقدار برگشتی این تابع، عنصر حذف شده است. اما باید بدانید که این تابع در مجموعه ها برخلاف دیکشنری ها، آخرین عنصر را حذف می کند و از آن جایی که مجموعه ها، داده ها نا مرتب هستند لذا در صورت استفاده از این تابع، نمی توانید بفهمید که کدام عنصر حذف می شود. در حقیقت این تابع هر بار یک عنصر را به تصادف انتخاب کرده و حذف می کند.

تابع pop() در پایتون

خالی کردن و حذف یک مجموعه

در این جا هم مشابه دیکشنری ها می توان برای حذف یک باره همه عناصر یک مجموعه از تابع clear() و برای حذف کامل یک مجموعه از کلمه کلیدی del استفاده کرد.

خالی کردن و حذف یک مجموعه

تبدیل ساختارهای داده ای دیگر به لیست

شما می توانید سایر ساختارهای داده ای نظیر رشته، لیست، تاپل و حتی دیکشنری را هم به مجموعه تبدیل کنید برای این کار کافیست که نام ساختار داده ای مورد نظرتان را به عنوان پارامتر به تابع set ارسال کنید. با دقت در مثال زیر می توانید چند نکته را متوجه شوید. مثلا ملاحظه می کنید که ایتم های اضافی رشته  string، پس از تبدیل شدن به مجموعه کاراکتر، به صورت خودکار حذف شده اند. مضاف بر این که ترتیب کاراکترها هم در مجموعه حاصل، الزاما رعایت نشده است. یا می بینید که به هنگام تبدیل شدن دیکشنری dic، به یک مجموعه، مقادیر آن حذف شده و تنها کلیدها باقی مانده اند و این کلیدها هستند که آیتم های مجموعه را تشکیل می دهند.

تبدیل ساختارهای داده ای دیگر به لیست

ترکیب مجموعه ها با دیکشنری ها

جالب است بدانید که شما می توانید مجموعه ها را با دیکشنری ها هم ترکیب کنید. در قطعه کد زیر نمونه ای از این نوع ترکیب و نحوه دسترسی به عناصر مجموعه را مشاهده می کنید.

ترکیب مجموعه ها با دیکشنری ها

به دست آوردن اجتماع، اشتراک و تفاضل دو مجموعه

همان طور که شما در ریاضیات پس از فراگیری اعداد، می توانستید توسط اعمال عملگرهای ریاضی بر روی آن ها، اعداد جدیدی را تولید کنید در پایتون هم می توانید با اعمال یک سری توابع یا عملگرها بر روی مجموعه ها، مجموعه های جدیدی ایجاد کنید.

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

فرض کنید که دو مجموعه A  و B داریم و می خواهیم اجتماع آن ها را به دست بیاوریم.

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

در قطعه کد زیر می توانید شیوه به دست آورد اجتماع دو مجموعه را توسط عملگر | یا تابع union ببینید. ملاحظه می کنید که اعضای اجتماع دو مجموعه  A و B، آیتم هایی هستند که یا در A هستند یا در B یا در هر دو.  به عبارت دیگر، اجتماع دو مجموعه، مجموعه ایست که تمامی اعضای آن دو مجموعه را دارد.

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

همان طور که در مثال بالا می بینید با این که عدد 5 در هر دو مجموعه A و B وجود دارد ولی تنها یک بار در اجتماع دو مجموعه ظاهر شده است در نتیجه یکی از مهم ترین ویژگی مجموعه ها، منحصر به فرد بودن اعضای آن است یعنی تکرار آیتم ها در آن تاثیری ندارد.

منحصر به فرد بودن اعضای مجموعه داده

اشتراک دو مجموعه A و B هم مجموعه ایست که اعضای آن بین آن دو مجموعه مشترک باشند.

اشتراک دو مجموعه A و B در پایتون

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

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

اختلاف دو تابع A و B نیز مجموعه ایست که آیتم هایی از اعضای مجموعه اول را بر می گرداند که در مجموعه دوم وجود ندارند. مثلا A-B اعضایی را بر می گرداند که تنها در مجموعه A هستند نه در مجموعه B. به طور مشابه B-A نیز اعضایی را بر می گرداند که تنها در مجموعه B هستند نه در مجموعه A.

اختلاف دو تابع A و B در پایتون

برای به دست آوردن اختلاف دو تابع هم می توان از عملگر منها (-) یا تابع difference() استفاده کرد.

اختلاف دو تابع در مجموعه داده ها

تفاضل متقارن A و B مجموعه ایست که تمامی اعضای دو مجموعه A و B را به جز اعضای مشترک این دو، دارا می باشد. به عبارت دیگر تفاضل متقارن A و B، اجتماع دو مجموعه A-B و B-A است.

تفاضل متقارنA و B در پایتون

تفاضل متقارن مجموعه ها را می توانید توسط عملگر ^ یا تابع symmetric_difference() به دست بیاورید.

تفاضل متقارن مجموعه ها در پایتون

تابع isdisjoint()

برای بررسی متمایز بودن دو مجموعه هم از تابع isdisjoint() استفاده می کنیم. لذا اگر دو مجموعه هیچ اشتراکی با هم نداشته باشند  این تابع مقدارTrue  و در غیر این صورت  مقدار False را بر می گرداند.

تابع () issubset یا عملگر =>

برای بررسی این که آیا مجموعه اول زیر مجموعه دوم هست یا نه از تابع () issubset استفاده می کنیم. حال اگر مجموعه اول زیر مجموعه، مجموعه دوم باشد این تابع مقدارTrue  و در غیر این صورت مقدار False را بر می گرداند.

تابع  issuperset()  یا عملگر =<

هم چنین برای بررسی این که آیا مجموعه دوم زیرمجموعه مجموعه اول است یا نه از تابع issuperset()  استفاده می کنیم. در حقیقت این تابع عکس تابع () issubset عمل می کند. لذا اگر مجموعه اول همه اعضای مجموعه دوم را در خود داشته باشد این تابع مقدارTrue  و در غیر این صورت  مقدار False را بر می گرداند.

مثلا در قطعه کد زیر می بینید که خروجی دو عبارت d.issubset(a) و a.issuperset(d) با هم یکی هستند.

تابع issuperset() یا عملگر =<

توابع درون ساختهmin()  و max() و sum() و sorted()

توابع درون ساخته ای که برای محاسبه کوچک ترین و بزرگ ترین عضو یک مجموعه و نیز مرتب سازی اعضای آن و محاسبه مجموع عناصر یک مجموعه به کار می رود در مثال زیر آورده شده است.

توابع درون ساخته در مجموعه داده

Frozenset های پایتون

Frozensetکلاس جدیدی است که همه خصوصیات یک مجموعه را دارا می باشد با این تفاوت که عناصر آن نمی توانند تغییر کنند. همان طور که تاپل ها، لیست های تغییرناپذیر هستند، در حقیقت Frozenset ها هم نوعی مجموعه  تغییر ناپذیر هستند. Frozenset ها را می توان با تابع Frozenset ایجاد نمود.

Frozenset های پایتون

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

پشتیبانی از ساختار داده در پایتون

ولی به خاطر غیر قابل تغییر بودن ساختمان داده Frozenset ، این نوع داده، فاقد توابع add()  و remove() می باشد در نتیجه استفاده از این توابع برای Frozenset ها منجر به خطای AttributeError می شود.

در آموزش زبان پایتون هم چنان با ما همراه باشید.

مقاله بعدی: ساختار های تصمیم گیری پایتون if…else

ترجمه: رقیه آقایاری

این محتوا اختصاصاً برای یاد بگیر دات کام تهیه شده است استفاده از آن با ذکر منبع همراه با لینک آن و نام نویسنده یا مترجم مجاز است
برچسب ها:



 

در یاد بگیر دات کام مشترک شوید و آخرین مطالب را در ایمیل خود دریافت نمایید

  1. سپاس از این مقاله. خدا قوت عالی بود

نظر شما چیست؟

پرسش های خود را در بخش پرسش و پاسخ مطرح کنید

محدودیت زمانی مجاز به پایان رسید. لطفا کد امنیتی را دوباره تکمیل کنید.




بستن تبلیغات

تبلیغات اینترنتی در یاد بگیر دات کام



صفحه ما را در فیس بوک دنبال کنید صفحه ما را در توییتر دنبال کنید صفحه ما را در  اینستاگرام دنبال کنید صفحه ما را در لینکداین دنبال کنید