Map & Filter in Python | مپ و فیلتر در پایتون
خب سلام
اولین پست توی ویرگول , بریم که یاد بدیم مپ و فیلتر چی هستن و نحوه استفاده اونها در پایتون
در اولین گام بگم که کار مپ و فیلتر تابع هستند ( فانکشن , متد ) و کار هر دو یکیه ولی با خروجی متفاوت
خب کاری مپ و فیلتر میکنن اینه که یک تابع دیگه ( که باید ورودی و خروجی داشته باشه ) بر روی اجزای یک لیست تست میکنه | خب یعنی چی حالا ؟ فرض کنیم یک لیست داریم با چندین اعضا , مپ میاد عنصر اول لیست رو به عنوان ورودی فانکشنی که شما تعیین کردید میده و اینکار رو به تعداد اعضای لیست انجام میده
خب فیلتر هم همین کار رو میکنه ولی تفاوت این دو توی چی هست ؟
مپ میاد خروجی فانکشن شمارو که ممکنه هر چیزی باشه ( رشته , عدد , مقدار منطقی ) به عنوان خروجی خود تابع مپ میده , ولی تابع فیلتر میاد مقدار منطقی خروجی فانکشن میده
خب بریم سراغ کد و نحوه نوشتنشون :
خروجی کد بالا :
1[ 0, 4, 9, 7225, 3136, 6724, 9409, 16, 29871209287936, 2025 ]
خب دیدیم که تمامی اجزای List به توان 2 رسیدن
برای تعریف بهتر میتونیم بگیم ‘ مپ و فیلتر ‘ جایگزین بهتری برای فور هست
و حالا فیلتر , فیلتر مثل if هست ما در تابع خودمون یک مقدار شرطی مینویسیم و فیلتر میاد مثل الک و نه قیف ( نمیدونم چرا هر مدرسی میاد از قیف استفاده میکنه به جای الک , کار الک اینه که نزاره موارد بزرگ رد بشن ولی قیف همه چی میریزه ) و فیلتر میاد مثل الک اون هایی اون پارامتر هایی که وارد فانکشن شدن و مقدار خروجی True بود رو برگردونه
خب توی عکس زیر میبینیم که چطوری نوشته میشه
خروجی :
1[ 0, 2, 56, 82, 4, 5465456 ]
خب اینم از فیلتر و مپ ولی یک مورد ریز مونده که بگم کد های بالا توی تعریف فانکشن غلط بود
روش بهتر , معقولانه تر چیه ؟ اینجوری بگم که ما مثلا فقط یه بار نیازه از این فانکشن استفاده کنیم
چرا خطوط بیشتری بنویسیم ؟ راه حل استفاده از سینتکس lambda هست
لمبدا یه نوع سینتکس برای تعریف متد ها هست که توی برخی زبان ها وجود داره
نحوه تعریف متد های لمبدا :
1Functions_name = lambda args : 452 * 354354 * args
اول کلید واژه lambda مینویسیم بعدش متغیر های وروردی رو مینویسم , بعد یه : میزاریم و دستورات و یا مقدار شرطی مینویسیم
خب حالا توی Map & Filter چطوری از لمبدا استفاده کنیم ؟ به صورت زیر
مپ :
1OutputOfMap = list(map(lambda args : args * args , List))
فیلتر :
1OutputOfFilter = list(filter(lambda args : args % 2 == 0 ,List))
نکات :
- اگر توی مپ از مقدار شرطی استفاده کنیم خروجی True و False خواهد بود
- اگر توی فیلتر از دستورات غیر شرطی استفاده کنیم مقادیر هیچ تغییری نمیکنن
- در توابع لمبدا نیازی به نوشتن return نیست چون به صورت خودکار مقادیر بازگشت داده میشن
- مپ و یا فیلتر باید درون تابع ()list نوشته شده باشند تا به مقادیر بازگشتی دسترسی داشت
خب همونطور که قول دادم اینم لینک سورس :
https://nekobin.com/waqahijipe.py