Map & Filter in Python | مپ و فیلتر در پایتون


خب سلام

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

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


خب کاری مپ و فیلتر میکنن اینه که یک تابع دیگه ( که باید ورودی و خروجی داشته باشه ) بر روی اجزای یک لیست تست میکنه | خب یعنی چی حالا ؟ فرض کنیم یک لیست داریم با چندین اعضا , مپ میاد عنصر اول لیست رو به عنوان ورودی فانکشنی که شما تعیین کردید میده و اینکار رو به تعداد اعضای لیست انجام میده

خب فیلتر هم همین کار رو میکنه ولی تفاوت این دو توی چی هست ؟

مپ میاد خروجی فانکشن شمارو که ممکنه هر چیزی باشه ( رشته , عدد , مقدار منطقی ) به عنوان خروجی خود تابع مپ میده , ولی تابع فیلتر میاد مقدار منطقی خروجی فانکشن میده

خب بریم سراغ کد و نحوه نوشتنشون :

مپ
مپ

خروجی کد بالا :

[ 0, 4, 9, 7225, 3136, 6724, 9409, 16, 29871209287936, 2025 ]

خب دیدیم که تمامی اجزای List به توان 2 رسیدن

برای تعریف بهتر میتونیم بگیم ' مپ و فیلتر ' جایگزین بهتری برای فور هست


و حالا فیلتر , فیلتر مثل if هست ما در تابع خودمون یک مقدار شرطی مینویسیم و فیلتر میاد مثل الک و نه قیف ( نمیدونم چرا هر مدرسی میاد از قیف استفاده میکنه به جای الک , کار الک اینه که نزاره موارد بزرگ رد بشن ولی قیف همه چی میریزه ) و فیلتر میاد مثل الک اون هایی اون پارامتر هایی که وارد فانکشن شدن و مقدار خروجی True بود رو برگردونه

خب توی عکس زیر میبینیم که چطوری نوشته میشه

فیلتر
فیلتر


خروجی :

[ 0, 2, 56, 82, 4, 5465456 ]


خب اینم از فیلتر و مپ ولی یک مورد ریز مونده که بگم کد های بالا توی تعریف فانکشن غلط بود

روش بهتر , معقولانه تر چیه ؟ اینجوری بگم که ما مثلا فقط یه بار نیازه از این فانکشن استفاده کنیم

چرا خطوط بیشتری بنویسیم ؟ راه حل استفاده از سینتکس lambda هست

لمبدا یه نوع سینتکس برای تعریف متد ها هست که توی برخی زبان ها وجود داره


نحوه تعریف متد های لمبدا :

Functions_name = lambda args : 452 * 354354 *  args

اول کلید واژه lambda مینویسیم بعدش متغیر های وروردی رو مینویسم , بعد یه : میزاریم و دستورات و یا مقدار شرطی مینویسیم


خب حالا توی Map & Filter چطوری از لمبدا استفاده کنیم ؟ به صورت زیر

مپ :

OutputOfMap = list(map(lambda args : args * args  , List))

فیلتر :

OutputOfFilter = list(filter(lambda args : args % 2 == 0 ,List))

نکات :

  • اگر توی مپ از مقدار شرطی استفاده کنیم خروجی True و False خواهد بود
  • اگر توی فیلتر از دستورات غیر شرطی استفاده کنیم مقادیر هیچ تغییری نمیکنن
  • در توابع لمبدا نیازی به نوشتن return نیست چون به صورت خودکار مقادیر بازگشت داده میشن
  • مپ و یا فیلتر باید درون تابع ()list نوشته شده باشند تا به مقادیر بازگشتی دسترسی داشت

خب همونطور که قول دادم اینم لینک سورس :

https://nekobin.com/waqahijipe.py