از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
راهنمای مجموعه ها در پایتون
سرفصلهای مطلب
معرفی
در یک نگاه، ممکن است شبیه به فهرست ها یا فرهنگ لغت به نظر برسند، اما مجموعه ها دارای مجموعه ای از ویژگی ها و قابلیت های خاص خود هستند که آنها را در سناریوهای خاص ضروری می کند. چه به دنبال بررسی موثر عضویت، حذف ورودی های تکراری یا انجام عملیات مجموعه ریاضی باشید، ساختار داده مجموعه پایتون شما را تحت پوشش قرار داده است.
در این راهنما، نگاهی به مجموعهها در پایتون خواهیم داشت. ما با درک مفاهیم اساسی ساختار داده مجموعه شروع می کنیم و سپس به پیاده سازی خاص پایتون و مجموعه غنی از عملیات ارائه شده توسط آن می پردازیم. در پایان، درک کاملی از زمان و نحوه استفاده از مجموعه ها در پروژه های پایتون خود خواهید داشت.
درک ساختار داده مجموعه
وقتی در مورد یک مجموعه در زمینه ساختارهای داده صحبت می کنیم، به مجموعه ای از مقادیر اشاره می کنیم. با این حال، بر خلاف لیست ها یا آرایه ها، یک مجموعه با دو ویژگی اصلی مشخص می شود – آن عناصر نامرتب هستند، و هر عنصر منحصر به فرد است. این بدان معنی است که مهم نیست که چند بار سعی کنید یک مقدار تکراری به یک مجموعه اضافه کنید، این مقدار حفظ می شود فقط یکی نمونه ای از آن ارزش ترتیبی که عناصر را در یک مجموعه قرار می دهید نیز حفظ نمی شود و بر این ایده تأکید می کند که مجموعه ها اساساً مجموعه های نامرتب هستند.
توصیه: یکی از ویژگی های اساسی مجموعه ها این است که مرتب نیستند. با این حال، یک دام رایج این است که فرض کنیم مجموعه ها ترتیب عناصر را حفظ می کنند. بنابراین، همیشه به یاد داشته باشید که مجموعه ها هیچ ترتیب خاصی از عناصر خود را تضمین نمی کنند!
مفهوم مجموعه منحصر به پایتون نیست، یک ایده اساسی در ریاضیات است. اگر از کلاس های ریاضی به خاطر بیاورید، مجموعه ها مجموعه ای از اشیاء متمایز بودند که اغلب با استفاده از آنها تجسم می شدند نمودارهای ون. این نمودارها به ویژه هنگام توضیح عملیاتی مانند اتحادها، تقاطع ها و تفاوت ها مفید بودند. به طور مشابه، در علوم کامپیوتر، مجموعه ها به ما این امکان را می دهند که این عملیات را با سهولت و کارایی انجام دهیم.
شاید از خود بپرسید که چرا در برنامه نویسی به مجموعه ای نامرتب نیاز داریم؟ پاسخ بسیار ساده است! پاسخ در نهفته است کارایی عملیات خاص. به عنوان مثال، بررسی اینکه آیا یک عنصر در یک مجموعه وجود دارد (آزمون عضویت) معمولا سریعتر از بررسی در یک لیست است، به خصوص با افزایش اندازه مجموعه. این به این دلیل است که در بسیاری از پیادهسازیها، مجموعهها توسط جداول هش پشتیبانی میشوند و امکان جستجوی تقریباً ثابت را فراهم میکنند.
علاوه بر این، مجموعه به طور طبیعی دسته آیتم های منحصر به فرد. سناریویی را در نظر بگیرید که در آن لیستی از موارد دارید و می خواهید موارد تکراری را حذف کنید. با یک مجموعه، این به یک کار بی اهمیت تبدیل می شود. به سادگی لیست را به یک مجموعه تبدیل کنید، و voilà، موارد تکراری به طور خودکار حذف می شوند.
چرا از مجموعه ها در پایتون استفاده کنیم؟
در دنیای پایتون، جایی که ما ساختارهای دادهای مختلف مانند فهرستها، دیکشنریها و تاپلها داریم، ممکن است تعجب کنیم که مجموعهها در کجا قرار میگیرند و چرا باید از آنها استفاده کرد. زیبایی مجموعهها نه تنها در پایههای نظری آنها، بلکه در مزایای عملی آنها به توسعهدهندگان در سناریوهای مختلف است.
اول از همه، ما دیدیم که مجموعه ها برتر هستند بهره وری وقتی نوبت به آزمون های عضویت می رسد. تصور کنید مجموعه ای از هزاران مورد دارید و می خواهید به سرعت بررسی کنید که آیا یک مورد خاص در این مجموعه وجود دارد یا خیر. اگر از یک لیست استفاده می کردید، به طور بالقوه باید از هر عنصر عبور کنید و با بزرگ شدن لیست، عملیات کندتر می شود. از سوی دیگر، مجموعهها به گونهای طراحی شدهاند که این کار را با دقت انجام دهند – بررسی وجود یک عنصر در یک مجموعه، به طور متوسط، یک عملیات زمان ثابت. این بدان معنی است که چه مجموعه شما دارای ده یا ده هزار عنصر باشد، بررسی عضویت سریع باقی می ماند.
یکی دیگر از دلایل قانعکننده برای استفاده از مجموعهها که در بخش قبل مورد بحث قرار گرفت، ماهیت ذاتی برگزاری آنها است آیتم های منحصر به فرد. در وظایف پردازش داده، غیرعادی نیست که بخواهید موارد تکراری را از یک مجموعه حذف کنید. با یک لیست، باید منطق اضافی بنویسید یا از سایر ساختارهای پایتون برای رسیدن به این هدف استفاده کنید. با یک مجموعه، deduplication ذاتی است. به سادگی تبدیل یک لیست به یک مجموعه به طور خودکار هر مقدار تکراری را حذف می کند، فرآیند را ساده می کند و کد شما را تمیزتر و خواناتر می کند.
فراتر از اینها، مجموعههایی در پایتون برای انجام انواع مختلفی مجهز شدهاند عملیات مجموعه ریاضی پسندیدن اتحاد، تقاطع و تفاوت. اگر با وظایفی سر و کار دارید که به این عملیات نیاز دارند، استفاده از ساختار داده مجموعه پایتون می تواند یک تغییر دهنده بازی باشد. به جای اجرای دستی این عملیات، میتوانید از روشهای مجموعه داخلی استفاده کنید و کد را قابل نگهداریتر و کمتر در معرض خطا قرار دهید.
در نهایت، مجموعهها میتوانند هنگام کار بر روی الگوریتمها یا مشکلاتی مفید باشند ترتیب عناصر بی اهمیت است. از آنجایی که مجموعه ها نامرتب هستند، به توسعه دهندگان این امکان را می دهند که به جای توالی آنها، روی خود عناصر تمرکز کنند، منطق را ساده می کند و اغلب به راه حل های کارآمدتری منجر می شود.
ایجاد مجموعه در پایتون
مجموعه ها، با تمام ویژگی ها و مزایای منحصر به فرد خود، به طور یکپارچه در پایتون ادغام می شوند و ایجاد و دستکاری آنها را ساده می کند. بیایید راه های مختلف ایجاد و مقداردهی اولیه مجموعه ها را در پایتون بررسی کنیم.
برای شروع، مستقیم ترین راه برای ایجاد یک مجموعه، استفاده از بریس های فرفری است {}
. برای مثال، my_set = {1, 2, 3}
مجموعه ای را با سه عنصر صحیح مقداردهی اولیه می کند.
توجه داشته باشید: در حالی که نحو پرانتزهای فرفری ممکن است شما را به یاد شما بیاورد لغت نامه ها، دیکشنری ها به جفت های کلید-مقدار نیاز دارند، در حالی که مجموعه ها فقط شامل عناصر جداگانه هستند.
با این حال، اگر سعی کنید یک مجموعه با یک جفت بریس مجعد خالی مانند empty_set = {}
، پایتون آن را به عنوان یک تفسیر می کند فرهنگ لغت خالی. برای ایجاد یک مجموعه خالی، باید از set()
سازنده بدون هیچ آرگومان – empty_set = set()
.
توجه داشته باشید: مجموعه ها نیاز دارند که عناصر آنها قابل هش باشند، به این معنی که نمی توانید از انواع قابل تغییر مانند لیست ها یا دیکشنری ها به عنوان عناصر مجموعه استفاده کنید. اگر به یک ساختار مجموعه مانند با لیست نیاز دارید، از a استفاده کنید frozenset
.
صحبت از set()
سازنده، این یک ابزار همه کاره است که می تواند دیگر ساختارهای داده قابل تکرار را به مجموعه تبدیل کند. به عنوان مثال، اگر لیستی با عناصر تکراری دارید و می خواهید آن را حذف کنید، می توانید لیست را به set()
سازنده:
my_list = (1, 2, 2, 3, 4, 4, 4)
unique_set = set(my_list)
print(unique_set) # Outputs: {1, 2, 3, 4}
همانطور که می بینید، موارد تکراری از لیست به طور خودکار حذف می شوند در مجموعه حاصل
هنگامی که یک مجموعه ایجاد کردید، افزودن عناصر به آن نسیم است. این add()
متد به شما امکان می دهد عنصر جدیدی را وارد کنید. برای مثال، unique_set.add(5)
عدد صحیح را اضافه می کند 5
به مجموعه ای که قبلا ایجاد کردیم
توجه داشته باشید: به یاد داشته باشید که مجموعه ها به دلیل ماهیت خود، فقط عناصر منحصر به فرد را ذخیره می کنند. اگر سعی کنید عنصری را اضافه کنید که قبلاً در مجموعه وجود دارد، پایتون خطایی ایجاد نمی کند، اما مجموعه بدون تغییر باقی می ماند.
عملیات پایه با مجموعه ها
اکنون که می دانیم مجموعه ها چیست و چگونه آنها را در پایتون ایجاد کنیم، اجازه دهید نگاهی به برخی از ابتدایی ترین عملیاتی که می توانیم روی مجموعه ها در پایتون انجام دهیم بیاندازیم.
افزودن عناصر: The اضافه کردن() روش
همانطور که در بالا دیدیم، پس از ایجاد یک مجموعه، افزودن عناصر جدید به آن ساده است. این add()
متد به شما امکان می دهد یک عنصر جدید را در مجموعه وارد کنید:
fruits = {"apple", "banana", "cherry"}
fruits.add("date")
print(fruits) # Outputs: {"apple", "banana", "cherry", "date"}
با این حال، اگر بخواهید عنصری را اضافه کنید که قبلاً در مجموعه وجود دارد، مجموعه بدون تغییر باقی میماند و ویژگی منحصربهفرد بودن مجموعهها را منعکس میکند.
حذف عناصر: برداشتن() روش
برای حذف یک عنصر از یک مجموعه، می توانید از remove()
روش. آیتم مشخص شده را از مجموعه حذف می کند:
fruits.remove("banana")
print(fruits) # Outputs: {"apple", "cherry", "date"}
احتیاط کن: اگر عنصر در مجموعه یافت نشد، remove()
روش الف را بالا خواهد برد KeyError
.
Safely Removing Elements: The دور انداختن() روش
اگر مطمئن نیستید که یک عنصر در مجموعه وجود دارد یا خیر و می خواهید از خطاهای احتمالی جلوگیری کنید، discard()
روش به نجات می رسد. در صورت وجود عنصر مشخص شده را حذف می کند، اما اگر نباشد، روش را حذف می کند هیچ کاری نمی کند و خطایی ایجاد نمی کند:
fruits.discard("mango") # No error, even though "mango" isn't in the set
خالی کردن مجموعه: واضح () روش
ممکن است شرایطی وجود داشته باشد که بخواهید همه عناصر را از یک مجموعه حذف کنید و به طور موثر آن را خالی کنید. این clear()
این روش به شما امکان می دهد دقیقاً این کار را انجام دهید:
fruits.clear()
print(fruits) # Outputs: set()
تعیین اندازه مجموعه: len () تابع
برای اینکه بفهمید چند عنصر در یک مجموعه وجود دارد، می توانید از داخلی استفاده کنید len()
عملکرد، درست همانطور که با لیست ها یا فرهنگ لغت انجام می دهید:
numbers = {1, 2, 3, 4, 5}
print(len(numbers)) # Outputs: 5
بررسی عضویت: که در کلمه کلیدی
یکی از رایج ترین عملیات با مجموعه ها بررسی عضویت است. برای تعیین اینکه آیا یک عنصر خاص در یک مجموعه وجود دارد، می توانید از in
کلمه کلیدی:
if "apple" in fruits:
print("Apple is in the set!")
else:
print("Apple is not in the set.")
این عملیات به ویژه در مورد مجموعهها کارآمد است، بهویژه زمانی که با لیستها مقایسه میشود، و آن را به یکی از دلایل اصلی انتخاب توسعهدهندگان برای استفاده از مجموعهها در سناریوهای خاص تبدیل میکند.
در این بخش، عملیات اساسی را که میتوانید با مجموعهها در پایتون انجام دهید، پوشش دادهایم. این عملیات بلوکهای ساختمانی را برای دستکاری مجموعههای پیشرفتهتر تشکیل میدهند و برای مدیریت مؤثر مجموعه در برنامههای شما حیاتی هستند.
توجه داشته باشید: اصلاح یک مجموعه در حین تکرار روی آن می تواند منجر به رفتار غیرقابل پیش بینی شود. در عوض، تکرار را روی یک کپی از مجموعه یا استفاده از درک مجموعه در نظر بگیرید.
عملیات مجموعه پیشرفته
علاوه بر عملیات مجموعه اولیه، پایتون تعدادی عملیات پیشرفته را در اختیار ما قرار می دهد که قدرت و انعطاف پذیری مجموعه ها را در پایتون برجسته می کند. آنها امکان دستکاری ها و مقایسه های پیچیده بین مجموعه ها را فراهم می کنند و آنها را به ابزارهای ارزشمندی در کارهای محاسباتی مختلف، از تجزیه و تحلیل داده ها تا طراحی الگوریتم تبدیل می کنند. بیایید نگاهی به برخی از آنها بیندازیم!
ترکیب مجموعه ها: اتحاد. اتصال() روش و | اپراتور
تصور کنید دو مجموعه دارید – A و B. The اتحاد. اتصال از این دو مجموعه مجموعه ای است که شامل تمام عناصر منحصر به فرد از هر دو A و B است. مثل ادغام این دو مجموعه با هم و حذف هر گونه تکراری است. به همین سادگی!
این union()
روش و |
اپراتور هر دو به شما اجازه می دهد تا به این هدف برسید:
a = {1, 2, 3}
b = {3, 4, 5}
combined_set = a.union(b)
print(combined_set) # Outputs: {1, 2, 3, 4, 5}
روش دیگر، با استفاده از |
اپراتور:
combined_set = a | b
print(combined_set) # Outputs: {1, 2, 3, 4, 5}
یافتن عناصر مشترک: تقاطع() روش و & اپراتور
این تقاطع از این دو مجموعه مجموعه ای است که فقط شامل عناصری که برای A و B مشترک هستند. این مانند پیدا کردن آهنگ های همپوشانی یا مشترک بین دو لیست پخش است. فقط ژانرهایی که هم شما و هم دوستتان از آنها لذت می برید در تقاطع قرار می گیرند!
برای یافتن عناصری که در دو یا چند مجموعه مشترک هستند، می توانید از intersection()
روش:
common_elements = a.intersection(b)
print(common_elements) # Outputs: {3}
یا می توانید از آن استفاده کنید &
اپراتور:
common_elements = a & b
print(common_elements) # Outputs: {3}
عناصر در یک مجموعه اما نه در مجموعه دیگر: The تفاوت() روش و – اپراتور
این تفاوت مجموعه A از مجموعه B مجموعه ای است که شامل تمام عناصر موجود است در A اما نه در B.
اگر می خواهید عناصری را پیدا کنید که در یک مجموعه وجود دارند اما در مجموعه دیگر وجود ندارند، difference()
روش مفید است:
diff_elements = a.difference(b)
print(diff_elements) # Outputs: {1, 2}
همچنین، می توانید از -
اپراتور:
diff_elements = a - b
print(diff_elements) # Outputs: {1, 2}
بررسی زیرمجموعه ها و ابر مجموعه ها: The زیر مجموعه () و issuperset() مواد و روش ها
برای تعیین اینکه آیا همه عناصر یک مجموعه در مجموعه دیگری وجود دارند (یعنی اگر یک مجموعه زیرمجموعه دیگری باشد)، می توانید از issubset()
روش:
x = {1, 2}
y = {1, 2, 3, 4}
print(x.issubset(y)) # Outputs: True
برعکس، برای بررسی اینکه آیا یک مجموعه همه عناصر یک مجموعه دیگر را در بر می گیرد (یعنی اگر یک مجموعه ابرمجموعه دیگری باشد)، issuperset()
روش استفاده می شود:
print(y.issuperset(x)) # Outputs: True
مفاهیم را تنظیم کنید
پایتون که به دلیل نحو زیبا و خوانایی خود شناخته شده است، ویژگی به نام “درک” را برای ایجاد مجموعه ها به شیوه ای مختصر ارائه می دهد. در حالی که درک لیست ممکن است برای بسیاری آشناتر باشد، درک مجموعه ها به همان اندازه قدرتمند هستند و امکان ایجاد مجموعه ها را با استفاده از نحو مشابه فراهم می کنند.
درک مجموعه راهی مختصر برای تولید یک مجموعه با تکرار روی یک تکرارپذیر فراهم میکند، که به طور بالقوه شامل شرایطی برای فیلتر یا اصلاح عناصر است. فقط به ساختار اساسی یک مجموعه درک نگاه کنید:
{expression for item in iterable if condition}
توجه داشته باشید: سعی کنید درک مجموعه را با درک فرهنگ لغت مخلوط نکنید – فرهنگ لغت باید یک key_expr: value_expr
جفت به جای تکexpression
.
بیایید به چند مثال نگاهی بیندازیم تا استفاده از مجموعه درک را نشان دهیم. فرض کنید می خواهید مجموعه ای از مربع ها برای اعداد از 0 تا 4 ایجاد کنید. می توانید از درک مجموعه به روش زیر استفاده کنید:
squares = {x**2 for x in range(5)}
print(squares) # Outputs: {0, 1, 4, 9, 16}
یکی دیگر از کاربردهای مجموعه درک این است فیلتر کردن داده ها از مجموعه های دیگر فرض کنید شما یک لیست دارید و می خواهید مجموعه ای ایجاد کنید که فقط شامل اعداد فرد از لیستی است که در مثال قبلی ایجاد کردیم:
numbers = (1, 2, 3, 4, 5, 6)
even_numbers = {x for x in numbers if x % 2 != 0}
print(even_numbers) # Outputs: {1, 3, 5}
در مجموع، درک مجموعه ها، مانند همتایان فهرست خود، نه تنها مختصر هستند، بلکه اغلب خواناتر از معادل های حلقه سنتی خود هستند. آنها به ویژه زمانی مفید هستند که می خواهید مجموعه ای را بر اساس تغییر یا فیلتر کردن یک تکرار تکراری دیگر ایجاد کنید.
مجموعه های منجمد: مجموعه های غیرقابل تغییر در پایتون
در حالی که مجموعهها فوقالعاده همهکاره و مفید هستند، اما یکی از آنها ارائه میشود محدودیت – آن ها هستند قابل تغییر. به این معنی که پس از ایجاد یک مجموعه، می توانید محتوای آن را تغییر دهید. با این حال، سناریوهایی در برنامه نویسی وجود دارد که ممکن است به یک نسخه تغییرناپذیر از یک مجموعه نیاز داشته باشید. را وارد کنید frozenset
.
آ frozenset
همانطور که از نام آن پیداست، یک نسخه منجمد از یک مجموعه است. تمام خصوصیات یک مجموعه را حفظ می کند، اما پس از ایجاد نمی توانید عناصر را اضافه یا حذف کنید. این تغییر ناپذیری مجموعه ای از مزایای خاص خود را دارد.
اول از همه، از زمانی که یک frozenset
تغییر ناپذیر است، آنها هستند قابل هش کردن. این بدان معنی است که شما می توانید از a استفاده کنید frozenset
به عنوان یک کلید در فرهنگ لغت که با یک مجموعه معمولی امکان پذیر نیست. یکی دیگر از ویژگی های مفید a frozenset
این است که شما می توانید یک frozenset
به عنوان یک عنصر در یک مجموعه دیگر، ساختارهای مجموعه تودرتو را امکان پذیر می کند.
چگونه یک ست منجمد بسازیم؟
ایجاد یک frozenset
با استفاده از frozenset()
سازنده:
numbers = (1, 2, 3, 4, 5)
frozen_numbers = frozenset(numbers)
print(frozen_numbers) # Outputs: frozenset({1, 2, 3, 4, 5})
به یاد داشته باشید، پس از ایجاد، نمی توانید آن را تغییر دهید frozenset
:
frozen_numbers.add(6)
این یک را بالا می برد AttributeError
:
AttributeError: 'frozenset' object has no attribute 'add'
عملیات با مجموعه های منجمد
اکثر عملیات مجموعه ای که مجموعه را تغییر نمی دهند، مانند اتحاد، تقاطع و تفاوت، می توانند روی یک frozenset
:
a = frozenset((1, 2, 3))
b = frozenset((3, 4, 5))
union_set = a.union(b)
print(union_set) # Outputs: frozenset({1, 2, 3, 4, 5})
نتیجه
از کارهای سادهای مانند حذف موارد تکراری از فهرست گرفته تا عملیات پیچیدهتر مانند دستکاری مجموعههای ریاضی، مجموعهها راهحلی قوی ارائه میدهند که بسیاری از کارها را سادهتر و کارآمدتر میکند.
در طول این راهنما، ما از مفاهیم اساسی ساختار داده مجموعه به پیاده سازی خاص پایتون و مجموعه غنی از عملکردهای آن سفر کرده ایم. ما همچنین به مشکلات احتمالی و اشتباهات رایجی که باید مراقب آنها باشیم اشاره کرده ایم.
منتشر شده در 1402-12-26 07:24:03