بیژن حجازی
بیژن حجازی
خواندن ۲ دقیقه·۳ سال پیش

set comprehension در پایتان

در comprehend کردن set ها باید توجه کرد که set ها ترتیب ندارن و عناصر تکرار نمی گیرن.
در comprehend کردن set ها باید توجه کرد که set ها ترتیب ندارن و عناصر تکرار نمی گیرن.

مقدمه

منظور از comprehension تولید یک iterable بر اساس iterable دیگری هست. با این روش میشه چندین خط کد رو توی یک خط نوشت و از loop ها اجتناب کرد. تو این مقاله میخایم تولید set بر اساس iterable های دیگر بر اساس comprehension رو بررسی کنیم.

فرمول

فرمول کلی set comprehension اینه:

new_set = {expression_from_x for x in iterable if condition}

تو این فرمول منظور از expression_from_x هر عبارت برنامه نویسی با استفاده از x هست مثلا:

x
x.upper()
x + 2

منظور از iterable هر متغیری هست که بشه توش چرخید. مثل: list, set, tuple, range و ...

نکته:چون ترتیب در set ها اهمیت نداره حاصل comprehension هامون مثل ترتیب iterable اولیه نیست.

مثال

مثلا فرض کن میخایم مجموعه ای از اعداد فرد رو به اعداد زوج تبدیل کنیم. یعنی هر کدومش رو به علاوه 1 کنیم. میشه این کار رو با for انجام داد:

odds = {1,3,5,7} evens = set() for num in odds: evens.add(num+1)

همین کد رو میشه با استفاده از comprehension توی یک خط نوشت:

evens = {num+1 for num in {1,3,5,7}}

اضافه کردن شرط

میشه در حین comprehension شرط هم اضافه کرد. در این صورت فقط اون اعضایی که شرط براشون True میشه به حاصل نهایی اضافه خواهند شد. مثلا در کد زیر فقط اعداد زوج به مجموعه evens اضافه میشه:

nums = {1,2,3,4,5,6,7,8} evens = {num for num in nums if num % 2 == 0}

ترکیب با ternary

توی expression_from_x میشه از عبارت ternary استفاده کرد. مثلا توی کد زیر زوج یا فرد بودن هر عددی رو به set نهایی اضافه می کنیم.

nums = {1,2,3,4,5,6,7,8,9} titles = {&quotEven&quot if num % 2 == 0 else &quotOdd&quot for num in nums}

نکته: چون اعضای تکراری در set پذیرفته نیست titles در کد بالا نهایتا فقط 2 عضو خواهد داشت: Even و Odd

نتیجه گیری

مثل list ها میشه set ها رو هم comprehend کرد. با این روش کدی که در چند خط نوشته می شد رو به یک خط کاهش میدیم. به این طریق احتمال باگ هم کمتر میشه و بر فرضی هم که باگ درست بشه باگ گیریش راحت تر خواهد بود. فقط حواست باشه که set ای که comprehend شده (یعنی بر اساس comprehension ساخته شده) مثل همه set ها اعضای تکراری نخواهد داشت و ترتیبش غیر قابل پیش بینی عه.

برنامه نویسپایتونکد نویسیتوسعه وب
سلام! نوشتن به منزله مطالعه «خود» هست. من بیشتر تو زمینه برنامه نویسی و روان شناسی مطلب میذارم. خوشحال میشم نظرات تون رو باهام در میون بذارین.
شاید از این پست‌ها خوشتان بیاید