فیلتر پایتون(): استخراج مقادیر از Iterables

  • 2021-12-8

فیلتر () Python یک تابع داخلی است که به شما امکان می دهد یک تکرار را پردازش کنید و مواردی را که شرایط داده شده را برآورده می کنند استخراج کنید. این فرآیند معمولاً به عنوان عملیات فیلترینگ شناخته می شود. با filter() می‌توانید یک تابع فیلتر را برای یک تکرار اعمال کنید و یک تکرار جدید با مواردی که شرایط موجود را برآورده می‌کنند تولید کنید. در پایتون، filter() یکی از ابزارهایی است که می توانید برای برنامه نویسی تابعی از آن استفاده کنید.

در این آموزش، شما یاد خواهید گرفت که چگونه:

  • از فیلتر() پایتون در کد خود استفاده کنید
  • مقادیر مورد نیاز را از تکرارهای خود استخراج کنید
  • فیلتر() را با سایر ابزارهای کاربردی ترکیب کنید
  • فیلتر() را با ابزارهای پایتونیک بیشتری جایگزین کنید

با این دانش، می توانید از filter() به طور موثر در کد خود استفاده کنید. از طرف دیگر، می توانید از درک لیست یا عبارات مولد برای نوشتن کدهای پایتونیک و خواندنی بیشتر استفاده کنید.

برای درک بهتر filter() ، داشتن دانش قبلی در مورد تکرارها، حلقه ها، توابع و توابع لامبدا برای شما مفید خواهد بود.

پاداش رایگان: 5 Thoughts On Python Mastery، یک دوره رایگان برای توسعه دهندگان پایتون که نقشه راه و طرز فکری را که برای ارتقای مهارت های پایتون خود به سطح بعدی نیاز دارید به شما نشان می دهد.

کدنویسی با سبک عملکردی در پایتون

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

در برنامه نویسی تابعی، توابع اغلب بر روی آرایه هایی از داده ها عمل می کنند، آنها را تغییر می دهند و آرایه های جدیدی با ویژگی های اضافه تولید می کنند. سه عملیات اساسی در برنامه نویسی تابعی وجود دارد:

    یک تابع تبدیل را به یک قابل تکرار اعمال می کند و یک تکرارپذیر جدید از آیتم های تبدیل شده تولید می کند. یک گزاره یا تابع با ارزش بولی را برای یک تکرار شونده اعمال می کند و یک تکرارپذیر جدید حاوی مواردی که شرط بولی را برآورده می کند ایجاد می کند. یک تابع کاهش را برای یک تکرار اعمال می کند و یک مقدار تجمعی را برمی گرداند.

پایتون به شدت تحت تأثیر زبان های کاربردی نیست، بلکه تحت تأثیر زبان های ضروری قرار می گیرد. با این حال، چندین ویژگی را ارائه می دهد که به شما امکان می دهد از یک سبک کاربردی استفاده کنید:

توابع در پایتون اشیاء درجه یک هستند، به این معنی که شما می توانید آنها را مانند هر شی دیگری منتقل کنید. همچنین می توانید از آنها به عنوان آرگومان و مقادیر برگرداندن سایر توابع استفاده کنید. توابعی که توابع دیگری را به عنوان آرگومان می پذیرند یا توابع بازگشتی (یا هر دو) را به عنوان توابع مرتبه بالاتر می شناسند که در برنامه نویسی تابعی نیز ویژگی مطلوبی هستند.

در این آموزش، با filter() آشنا خواهید شد. این تابع داخلی یکی از محبوب‌ترین ابزارهای کاربردی پایتون است.

درک مشکل فیلترینگ

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

حلقه موجود در extract_positive() از طریق اعداد تکرار می شود و هر عدد بزرگتر از 0 را در اعداد مثبت ذخیره می کند. دستور شرطی اعداد منفی و 0 را فیلتر می کند. این نوع عملکرد به عنوان یک فیلتر شناخته می شود.

عملیات فیلتر کردن شامل آزمایش هر مقدار در یک قابل تکرار با یک تابع محمول و حفظ تنها مقادیری است که تابع برای آنها نتیجه واقعی ایجاد می کند. عملیات فیلتر کردن در برنامه نویسی نسبتاً رایج است، بنابراین اکثر زبان های برنامه نویسی ابزارهایی را برای نزدیک شدن به آنها ارائه می دهند. در بخش بعدی، با روش پایتون برای فیلتر کردن تکرارپذیرها آشنا خواهید شد.

شروع کار با فیلتر پایتون()

پایتون یک تابع داخلی راحت به نام filter() ارائه می‌کند که منطق پشت عملیات فیلتر کردن را انتزاعی می‌کند. این هم امضای آن:

اولین آرگومان، تابع، باید یک تابع تک آرگومان باشد. به طور معمول، یک تابع محمول (با ارزش بولی) برای این آرگومان ارائه می کنید. به عبارت دیگر، شما تابعی را ارائه می دهید که مطابق با یک شرط خاص، True یا False را برمی گرداند.

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

نکته: اولین آرگومان برای filter() یک شی تابع است، به این معنی که شما باید یک تابع را بدون فراخوانی آن با یک جفت پرانتز ارسال کنید.

آرگومان دوم، iterable، می‌تواند هر تکرارپذیر پایتون، مانند لیست، تاپل یا مجموعه را در خود نگه دارد. همچنین می تواند اشیاء مولد و تکرار کننده را در خود نگه دارد. یک نکته مهم در مورد filter() این است که فقط یک تکرار پذیرفته است.

برای انجام فرآیند فیلتر کردن، filter() تابع را برای هر آیتم تکرارپذیر در یک حلقه اعمال می کند. نتیجه یک تکرار کننده است که مقادیر تکرارپذیر را به دست می دهد که تابع آن مقدار واقعی را برمی گرداند. این فرآیند، ورودی اصلی را تغییر نمی دهد.

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

مزیت دوم استفاده از filter() بر روی یک حلقه این است که یک شی فیلتر را برمی گرداند، که یک تکرار کننده است که مقادیر را در صورت تقاضا به دست می دهد و یک استراتژی ارزیابی تنبل را ترویج می کند. برگرداندن یک تکرار کننده باعث می شود که filter() کارآمدتر از یک معادل برای حلقه باشد.

توجه: در Python 2. x، filter() اشیاء لیست را برمی گرداند. این رفتار در پایتون 3. x تغییر کرد. اکنون تابع یک شی فیلتر را برمی‌گرداند، که یک تکرارکننده است که آیتم‌ها را در صورت تقاضا ارائه می‌دهد. تکرار کننده های پایتون به خوبی شناخته شده اند که حافظه کارآمد هستند.

در مثال خود در مورد اعداد مثبت، می توانید از filter() به همراه یک تابع محمول مناسب برای استخراج اعداد مورد نظر استفاده کنید. برای کدگذاری گزاره، می توانید از یک تابع لامبدا یا یک تابع تعریف شده توسط کاربر استفاده کنید:

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

توجه: از آنجایی که filter() یک تابع داخلی است، لازم نیست چیزی را وارد کنید تا بتوانید از آن در کد خود استفاده کنید.

در مثال دوم ، شما is_positive () را می نویسید تا یک عدد را به عنوان یک آرگومان بگیرید و اگر عدد بیشتر از 0 باشد ، درست برگردید. در غیر این صورت ، نادرست است. تماس با فیلتر () اعمال می شود is_positive () برای هر مقدار در اعداد ، و شماره های منفی را فیلتر می کند. این راه حل بسیار قابل خواندن از معادل Lambda است.

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

در این مثال ، عملکرد فیلتر ، هویت () ، صریحاً صحیح یا نادرست بر نمی گردد بلکه همان استدلالی است که می کند. از زمان 0 ، [] ، "" ، و هیچکدام فال نیستند ، فیلتر () از مقدار حقیقت خود برای فیلتر کردن آنها استفاده می کند. لیست نهایی فقط شامل آن ارزشهایی است که در پایتون صادق هستند.

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

به عنوان مثال ، اشیاء زیر فال است:

  • ثابت ها مانند هیچ یک و دروغین
  • انواع عددی با مقدار صفر ، مانند 0 ، 0. 0 ، 0J ، اعشاری (0) و کسری (0 ، 1)
  • توالی ها و مجموعه های خالی ، مانند "" ، () ، [] ،<>، تنظیم () و دامنه (0)
  • اشیاء که __bool __ () را با مقدار بازگشت کاذب یا __len __ () با مقدار بازگشت 0 اجرا می کنند

هر شیء دیگر صادقانه تلقی می شود.

سرانجام ، اگر هیچ کدام را به عملکرد منتقل نمی کنید ، سپس فیلتر () از عملکرد هویت استفاده می کند و تمام عناصر قابل تکرار را که ارزیابی می کنند به درستی می دهد:

در این حالت ، فیلتر () هر مورد را با استفاده از قوانین پایتون که قبلاً دیدید ، در ورودی قابل آزمایش آزمایش می کند. سپس مواردی را که ارزیابی می کنند به درستی ارائه می دهد.

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

فیلتر کردن تکرار با فیلتر ()

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

استخراج حتی اعداد

به عنوان مثال اول ، می گویند شما باید لیستی از شماره های عدد صحیح را پردازش کرده و یک لیست جدید حاوی شماره های یکنواخت بسازید. اولین رویکرد شما برای این مشکل ممکن است استفاده از حلقه ای مانند این باشد:

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

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

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

یافتن شماره های اصلی

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

منطق فیلتر اکنون در is_prime () است. این عملکرد از طریق عدد صحیح بین 2 و ریشه مربع n تکرار می شود. در داخل حلقه ، بیانیه مشروط در صورتی که شماره فعلی توسط سایر موارد در فاصله قابل تقسیم باشد ، بررسی می کند. اگر چنین است ، پس عملکرد نادرست باز می گردد زیرا شماره اصلی نیست. در غیر این صورت ، به این سیگنال باز می گردد که شماره ورودی اصلی است.

با استفاده از is_prime () در محل و آزمایش شده ، می توانید از فیلتر () برای استخراج اعداد اصلی از یک بازه مانند این استفاده کنید:

این فراخوان برای فیلتر کردن () تمام اعداد اصلی را در محدوده 1 تا 50 استخراج می کند. الگوریتم مورد استفاده در IS_PRIME () از مقاله ویکی پدیا در مورد تست های اولیه تهیه شده است. در صورت نیاز به رویکردهای کارآمدتر می توانید آن مقاله را بررسی کنید.

حذف دور در یک نمونه

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

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

با این حال ، در نمونه های توزیع شده به طور معمول ، خارج از کشور اغلب به عنوان نقاط داده تعریف می شوند که بیش از دو انحراف استاندارد از میانگین نمونه قرار دارند.

حال فرض کنید شما یک نمونه عادی توزیع شده با برخی از فضای باز که بر روی میانگین دقت تأثیر می گذارد ، دارید. شما Outliers را مطالعه کرده اید ، و می دانید که آنها نقاط داده نادرست هستند. در اینجا نحوه استفاده از چند توابع از ماژول آمار به همراه فیلتر () برای تمیز کردن داده های خود آورده شده است:

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

اعتبار سنجی شناسه های پایتون

همچنین می توانید از فیلتر () استفاده کنید که قابل تکرار حاوی داده های غیر طبیعی است. به عنوان مثال ، می گویند شما باید لیستی از رشته ها را پردازش کرده و مواردی را که شناسه های معتبر پایتون هستند استخراج کنید. پس از انجام تحقیقات ، متوجه می شوید که STR Python روشی به نام . isidentifier () ارائه می دهد که می تواند به شما در این اعتبار سنجی کمک کند.

در اینجا نحوه استفاده از فیلتر () به همراه Str. isidentifier () برای اعتبار سریع شناسه ها آورده شده است:

در این حالت ، فیلتر () . isidentifier () را در هر رشته در کلمات اجرا می کند. اگر رشته یک شناسه معتبر پایتون باشد ، در نتیجه نهایی گنجانده شده است. در غیر این صورت ، این کلمه فیلتر می شود. توجه داشته باشید که برای دسترسی به . isidentifier () در تماس با فیلتر () باید از STR استفاده کنید.

توجه: علاوه بر . isidentifier () ، STR مجموعه ای غنی از روش های . is*() را ارائه می دهد که می تواند برای فیلتر کردن تکرار رشته ها مفید باشد.

سرانجام ، یک تمرین جالب ممکن است این باشد که مثال را بیشتر کنید و بررسی کنید که آیا شناسه نیز یک کلمه کلیدی است یا خیر. برو جلو و امتحان کن!نکته: می توانید از ماژول کلمات کلیدی از . kwlist استفاده کنید.

پیدا کردن کلمات palindrome

تمرینی که غالباً هنگام آشنایی با رشته های پایتون بوجود می آید ، پیدا کردن کلمات palindrome در لیستی از رشته ها است. یک کلمه palindrome همان عقب را به جلو می خواند. نمونه های معمولی "خانم" و "Racecar" است.

برای حل این مشکل ، شما با کدگذاری یک عملکرد محمول شروع می کنید که یک رشته را می گیرد و بررسی می کند که آیا در هر دو جهت ، به عقب و رو به جلو می خواند. در اینجا یک اجرای احتمالی وجود دارد:

در is_palindrome () ، شما ابتدا کلمه اصلی را معکوس می کنید و آن را در REVERVED_WORD ذخیره می کنید. سپس نتیجه مقایسه هر دو کلمه را برای برابری برمی گردانید. در این حالت ، شما برای جلوگیری از اختلافات مربوط به موارد ، از Lower () استفاده می کنید. اگر عملکرد را با یک کلمه palindrome صدا می کنید ، درست می شوید. در غیر این صورت ، شما نادرست می شوید.

شما در حال حاضر یک عملکرد محمول کار برای شناسایی کلمات palindrome دارید. در اینجا نحوه استفاده از فیلتر () برای انجام کار سخت آورده شده است:

سرد!ترکیب شما از فیلتر () و is_palindrome () به درستی کار می کند. همچنین مختصر ، قابل خواندن و کارآمد است. آفرین!

ترکیب فیلتر () با سایر ابزارهای عملکردی

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

مربع حتی اعداد: فیلتر () و نقشه ()

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

استدلال ها مانند این کار می کنند:

  1. تابع عملکرد تحول را نگه می دارد. این عملکرد باید به همان اندازه که تکرار می کنید به نقشه () بپردازید.
  2. Imperable دارای یک پایتون قابل تکرار است. توجه داشته باشید که می توانید چندین تکرار را برای نقشه () ارائه دهید ، اما این اختیاری است.

MAP () عملکردی را برای هر مورد در تکرار پذیر اعمال می کند تا آن را با ویژگی های اضافی به یک مقدار متفاوت تبدیل کند. سپس نقشه () هر مورد تبدیل شده را در صورت تقاضا بازده می دهد.

برای نشان دادن چگونگی استفاده از Filter () به همراه MAP () ، بگویید که باید مقدار مربع تمام شماره های یکنواخت را در یک لیست معین محاسبه کنید. در این حالت ، می توانید از فیلتر () برای استخراج شماره های یکنواخت و سپس نقشه () برای محاسبه مقادیر مربع استفاده کنید:

ابتدا ، شماره های یکنواخت را با استفاده از فیلتر () و is_even () درست می کنید. سپس با یک تابع لامبدا که یک عدد را می گیرد و مقدار مربع آن را برمی گرداند ، نقشه () را صدا می کنید. تماس با نقشه () عملکرد Lambda را برای هر شماره در Even_Numbers اعمال می کند ، بنابراین لیستی از تعداد مربع حتی مربع را دریافت می کنید. مثال نهایی نحوه ترکیب فیلتر () و نقشه () را در یک عبارت واحد نشان می دهد.

تعداد حتی اعداد: فیلتر () و کاهش ()

یکی دیگر از ابزار برنامه نویسی کاربردی در پایتون کاهش () است. بر خلاف فیلتر () و نقشه () ، که هنوز توابع داخلی هستند ، کاهش () به ماژول Functools منتقل شد. این عملکرد در صورت نیاز به استفاده از یک تابع برای یک تکرار و کاهش آن به یک مقدار تجمعی مفید است. این نوع عملیات معمولاً به عنوان کاهش یا تاشو شناخته می شود.

امضای کاهش () مانند این است:

این به معنای استدلال چیست:

  1. تابع هر پایتون قابل تماس را دارد که دو آرگومان را می پذیرد و یک مقدار واحد را برمی گرداند.
  2. تکرار پذیر هر پایتون قابل تکرار است.
  3. اولیه دارای مقداری است که به عنوان نقطه شروع برای اولین محاسبه یا کاهش جزئی عمل می کند. این یک استدلال اختیاری است

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

اگر مقدار اولیه را تهیه می کنید ، کاهش () اولین محاسبات جزئی را با استفاده از اولین و اولین مورد قابل تکرار اجرا می کند.

در اینجا مثالی وجود دارد که ترکیب فیلتر () و کاهش () را برای محاسبه جمع کل تعداد حتی شماره های یک لیست کاهش می دهد:

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

مثال نهایی نشان می دهد که چگونه می توان فیلتر زنجیره ای () و کاهش () را برای تولید همان نتیجه ای که قبلاً به دست آوردید ، کاهش دهد.

فیلتر کردن تکرار با Filterfalse ()

در IterTools ، تابعی به نام Filterfalse () پیدا خواهید کرد که معکوس فیلتر () را انجام می دهد. این یک استدلال قابل تکرار است و یک تکرار جدید را برمی گرداند که مواردی را که عملکرد تصمیم گیری نتیجه کاذب را باز می گرداند ، باز می گرداند. اگر از هیچ یک به عنوان اولین آرگومان برای FilterFalse () استفاده نمی کنید ، آنگاه مواردی را که فال است دریافت می کنید.

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

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

استخراج اعداد عجیب و غریب

شما قبلاً یک تابع محمول به نام is_even () را کدگذاری کرده اید تا بررسی کنید که آیا یک عدد یکنواخت است یا خیر. با استفاده از این عملکرد و کمک به Filterfalse () ، می توانید یک تکرار کننده بسازید که بدون نیاز به کدگذاری یک عملکرد IS_ODD () اعداد عجیب و غریب را به دست می آورد:

در این مثال ، Filterfalse () تکرار کننده ای را برمی گرداند که اعداد عجیب و غریب را از تکرار ورودی به دست می آورد. توجه داشته باشید که تماس با Filterfalse () ساده و قابل خواندن است.

فیلتر کردن مقادیر نان

بعضی اوقات وقتی با حسابی با نقطه شناور کار می کنید ، می توانید با مسئله داشتن مقادیر NAN (نه یک عدد) روبرو شوید. به عنوان مثال ، می گویند شما میانگین نمونه ای از داده های حاوی مقادیر NAN را محاسبه می کنید. اگر برای این محاسبه از ماژول آمار پایتون استفاده می کنید ، نتیجه زیر را دریافت می کنید:

در این مثال ، فراخوان به معنی () NAN را برمی گرداند ، که آموزنده ترین ارزش شما نیست. مقادیر نان می تواند منشأ مختلفی داشته باشد. آنها می توانند به دلیل ورودی های نامعتبر ، داده های خراب و غیره باشند. شما باید یک استراتژی مناسب برای مقابله با آنها در برنامه های خود پیدا کنید. یک گزینه دیگر ممکن است حذف آنها از داده های شما باشد.

ماژول ریاضی تابعی مناسب به نام ISNAN () را فراهم می کند که می تواند به شما در این مشکل کمک کند. این تابع یک شماره X را به عنوان یک آرگومان می گیرد و اگر X NAN باشد و در غیر این صورت نادرست باشد ، درست باز می گردد. شما می توانید از این عملکرد برای ارائه معیارهای فیلتر در یک تماس Filterfalse () استفاده کنید:

استفاده از Math. isnan () به همراه Filterfalse () به شما امکان می دهد تمام مقادیر NAN را از میانگین محاسبه حذف کنید. توجه داشته باشید که پس از فیلتر ، تماس به معنی () مقداری را برمی گرداند که توضیحات بهتری از داده های نمونه شما ارائه می دهد.

برنامه نویسی با سبک فیثونی

حتی با وجود اینکه map() ، filter() و reduce() برای مدت طولانی در اکوسیستم پایتون وجود داشته اند، درک لیست و عبارات مولد تقریباً در هر موردی به رقبای پایتونیک تبدیل شده اند.

عملکردی که این توابع ارائه می دهند تقریباً همیشه با استفاده از عبارت مولد یا درک لیست به وضوح بیان می شود. در دو بخش بعدی، نحوه جایگزینی فراخوانی به filter() را با درک لیست یا عبارت مولد یاد خواهید گرفت. این جایگزینی کد شما را پایتونیک تر می کند.

جایگزینی filter() با یک لیست درک

می توانید از الگوی زیر برای جایگزینی سریع فراخوانی به filter() با درک لیست معادل استفاده کنید:

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

استفاده از درک لیست به جای filter() احتمالاً راهی است که امروزه بیشتر توسعه دهندگان پایتون طی می کنند. با این حال، درک لیست در مقایسه با filter() دارای اشکالاتی است. قابل توجه ترین آنها عدم ارزیابی تنبل است. همچنین، زمانی که توسعه‌دهندگان شروع به خواندن کدهایی می‌کنند که از filter() استفاده می‌کند، بلافاصله می‌دانند که کد در حال انجام عملیات فیلتر کردن است. با این حال، این در کدهایی که از درک لیست با همان هدف استفاده می کنند چندان مشهود نیست.

جزئیاتی که هنگام تبدیل ساختار filter() به درک لیست باید به آن توجه کرد این است که اگر None را به اولین آرگومان filter() ارسال کنید، درک لیست معادل به صورت زیر است:

در این مورد، بند if در فهرست درک مطلب مورد را برای مقدار صدق آن آزمایش می کند. این تست از قوانین استاندارد پایتون در مورد مقادیر صدق که قبلاً دیده اید پیروی می کند.

در اینجا مثالی از جایگزینی filter() با درک لیست برای ایجاد لیستی از اعداد زوج آورده شده است:

در این مثال، می توانید ببینید که نوع درک لیست واضح تر است. تقریباً مانند انگلیسی ساده خوانده می شود. راه حل درک لیست همچنین از فراخوانی list() برای ساخت لیست نهایی اجتناب می کند.

جایگزینی filter() با عبارت Generator

جایگزین طبیعی فیلتر() یک عبارت مولد است. دلیل آن این است که filter() یک تکرار کننده را برمی گرداند که درست مانند یک عبارت مولد، آیتم های درخواستی را ارائه می دهد. تکرار کننده های پایتون به عنوان کارآمد حافظه شناخته شده اند. به همین دلیل است که filter() اکنون به جای لیست، یک تکرار کننده را برمی گرداند.

در اینجا نحوه استفاده از عبارات مولد برای نوشتن مثال در بخش بالا آمده است:

یک عبارت مولد به اندازه یک فراخوانی به filter() از نظر مصرف حافظه کارآمد است. هر دو ابزار تکرار کننده هایی را برمی گرداند که اقلامی را در صورت تقاضا ارائه می دهند. استفاده از هر کدام ممکن است یک سوال سلیقه، راحتی یا سبک باشد. بنابراین، شما مسئول هستید!

نتیجه

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

در این آموزش شما یاد گرفتید که چگونه:

  • کار با فیلتر پایتون()
  • از filter() برای پردازش تکرارها و حفظ مقادیر مورد نیاز خود استفاده کنید
  • فیلتر() را با map() و reduce() ترکیب کنید تا به مسائل مختلف نزدیک شوید
  • فیلتر() را با درک لیست و عبارات مولد جایگزین کنید

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

هر دو روز یک ترفند کوتاه و شیرین پایتون را به صندوق ورودی خود تحویل دهید. هیچ اسپم هرگزاشتراک هر زمان را لغو کنید. تحت نظارت تیم واقعی پایتون.

Python Tricks Dictionary Merge

درباره Leodanis Pozo Ramos

Leodanis یک مهندس صنایع است که عاشق توسعه پایتون و نرم افزار است. او یک توسعه دهنده خودآموز پایتون با 6+ سال تجربه است. او یک نویسنده فنی مشتاق با تعداد فزاینده ای از مقالات منتشر شده در پایتون واقعی و سایر سایت ها است.

هر آموزش در Real Python توسط تیمی از توسعه دهندگان ایجاد می شود تا مطابق با استانداردهای با کیفیت بالا ما باشد. اعضای تیم که روی این آموزش کار می کردند عبارتند از: <Span> با این دانش جدید ، اکنون می توانید از فیلتر () در کد خود استفاده کنید تا به آن سبک کاربردی بدهید. همچنین می توانید به یک سبک پایتونیک تر تغییر دهید و فیلتر () را با درک لیست یا عبارات ژنراتور جایگزین کنید.

برچسب ها

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.