توضیحی برای لامبدا، نقشه، فیلتر و کاهش پایتون

گره منبع: 1172017

این مقاله به عنوان بخشی از بلاگاتون علم داده

معرفی

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

  • چی آیا Lambda، Map، Filter و Reduce است؟
  • چرا آیا از Lambda، Map، Filter و Reduce استفاده می کنیم؟
  • چگونه برای استفاده از Lambda، Map، Filter و Reduce؟
  • چه زمانی برای استفاده از Lambda، Map، Filter و Reduce؟

اگر در این موضوع سردرگمی ندارید، می‌توانید مستقیماً به بخش خلاصه بروید.

فهرست مندرجات

  1. یازدهمین حرف الفبای یونانی
  2. نقشه
  3. فیلتر
  4. کاستن
  5. خلاصه
  6. Endnotes

یازدهمین حرف الفبای یونانی

Lambda یک کلمه کلیدی در پایتون است که برای تعریف توابع، به طور خاص تر توابع ناشناس استفاده می شود، و این توابع به عنوان توابع لامبدا یا عبارات لامبدا شناخته می شوند.

در اینجا یک نحو برای تعریف یک تابع لامبدا وجود دارد.

آرگومان های لامبدا: بیان

بگذارید این را با یک مثال درک کنیم.

اگر از شما بخواهم تابعی بنویسید تا یک عدد را مربع کنید؟ شما احتمالا چیزی شبیه به زیر می نویسید:

def square(n): return n ** 2

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

مربع = لامبدا n: n ** 2

عبارت n ** 2 ابتدا ارزیابی می شود و یک مقدار به شناسه برگردانده می شود مربع. شناسه مربع اکنون می تواند به عنوان یک تابع عمل کند، و بنابراین می توانیم هر عددی را به عنوان آرگومان برای یافتن مربع یک عدد ارسال کنیم.

# فراخوانی تابع لامبدا مربع (5)
# خروجی: 25

ما همچنین می توانیم توابع لامبدا را با افزودن دستورات شرطی گسترش دهیم. به مثال خود توضیحی زیر مراجعه کنید.

maxi = لامبدا x، y: x اگر x > y دیگری y maxi(4، 6)
# خروجی: 6

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

تبدیل def(n): برگردان لامبدا x: x + n f = تبدیل(3) f(4) # خروجی: 7 (3 + 4)

La تبدیل تابع یک عدد می گیرد و عبارت/تابع لامبدا را برمی گرداند. تابع لامبدا دو عدد را اضافه می کند، x و n.

محدودیت توابع لامبدا این است که می توانند هر تعداد آرگومان را داشته باشند اما فقط یک بیان.

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

نقشه

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

مربع = [] برای n در محدوده (1، 10، 2): squares.append(n ** 2)

حلقه از 1 تا 10 با اندازه گام 2 تکرار می شود و مربع هر عدد را به آن اضافه می کند. مربع. رویکرد نشان داده شده در بالا را می توان با استفاده از درک لیست بهبود داد، اما از حلقه برای استفاده نیز استفاده می شود. بنابراین، یک وجود دارد سریعتر روشی برای انجام همین کار بدون استفاده از حلقه for صریح. تابع نقشه پایتون این کار را انجام می دهد. بر اساس شرط داده شده، تکرار پذیر داده شده را تبدیل می کند.

دستور تابع نقشه به صورت زیر است:

نقشه (عملکرد، قابل تکرار)

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

اجازه دهید مثال بالا را با استفاده از تابع نقشه دوباره پیاده سازی کنیم.

def square(n): return n ** 2 مربع = نقشه (مربع، محدوده (1، 10، 2)) مربع ها # فهرست (مربع) اشیاء نقشه را برمی گرداند # خروجی: [1، 9، 25، 49، 81]

La مربع تابع مربع هر عددی را برمی گرداند. این نقشه تابع می گیرد مربع عملکرد و محدوده (1، 10، 2) به عنوان استدلال اعمال می شود مربع تابعی در یک محدوده مشخص (1، 3، 5، 7، و 9) که یک شی نقشه را برمی گرداند و بعداً به لیست تبدیل می شود.

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

مربع = لیست (نقشه (لامبدا n: n ** 2، محدوده (1، 10، 2)))

در اینجا، تابع لامبدا روی یک تکرار معین اعمال می شود که یک شی نقشه را برمی گرداند و بعداً به لیست تبدیل می شود.

تابع نقشه می تواند چندین تکرار داشته باشد. بیایید یک مثال سریع برای نشان دادن همان مثال بزنیم.

num1 = [2، 4، 9] num2 = [3، 8، 5] نتیجه = لیست (نقشه (لامبدا x، y: x + y، num1، num2)) نتیجه # خروجی: [5، 12، 14]

در اینجا، ما فهرست‌ها را از نظر عنصر اضافه کرده‌ایم.

به خاطر داشته باشید که نقشه می تواند هر تکرار شونده را به عنوان یک آرگومان و نه تنها یک لیست در نظر بگیرد.

فیلتر

فرض کنید می خواهید اعداد فرد را از یک لیست مشخص پیدا کنید. یک راه سریع برای نزدیک شدن به این مشکل استفاده از حلقه for در درک لیست است.

اعداد = [1، 34، 23، 56، 89، 44، 92] odd_nums = [تعداد برای تعداد به اعداد اگر عدد % 2 != 0]

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

فیلتر پایتون همین کار را با سرعت بیشتری انجام می دهد. این سینتکس مشابه نقشه است.

فیلتر (عملکرد، قابل تکرار)

شبیه به نقشه کار می کند. برخلاف شیء نقشه، یک شی فیلتر را برمی گرداند.

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

def find_odd(x): اگر x % 2 != 0: x nums = [1, 34, 23, 56, 89, 44, 92] odds = list(filter(find_odd, nums)) print(shans) # خروجی : [1، 23، 89]

اجازه دهید این را تبدیل کنیم find_dd تابع لامبدا را اجرا کنید و کد را بازنویسی کنید تا کوتاهتر شود.

اعداد = [1، 34، 23، 56، 89، 44، 92] شانس = لیست(فیلتر(لامبدا x: x % 2 != 0، اعداد)) چاپ(شانس) # خروجی: [1، 23، 89]

تمام موارد یک تکرار شونده که تابع لامبدا برای آنها درست ارزیابی می کند، به آن اضافه می شوند فرد.

کاستن

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

اعداد = [1، 2، 3، 4، 5] جمع = 0 برای تعداد بر اعداد: مجموع += مجموع عدد # خروجی: 15

حلقه از طریق تکرار می شود شماره ها و به اضافه کردن تمام اعداد ادامه می دهد خلاصه باز هم برای اینکه آن را پایتونیک کنیم، یک تابع داریم، یعنی Reduce.

نحو برای کاهش به شرح زیر است:

کاهش (تابع، قابل تکرار، [، مقداردهی اولیه])

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

اجازه دهید مثال بالا را با تابع کاهش دوباره پیاده سازی کنیم.

از وارد کردن تابع تابع کاهش اعداد = [1، 2، 3، 4، 5] جمع = کاهش (لامبدا x، y: x + y، اعداد) جمع # خروجی: 15

برای درک آنچه در پشت صحنه اتفاق می افتد به شکل زیر مراجعه کنید.

کاهش پایتون | کاهش فیلتر نقشه لامبدا

منبع تصویر: نویسنده

در اینجا، مجموع به صورت تجمعی / متوالی انجام می شود: ((((1 + 2) + 3) + 4) + 5).

خلاصه

یازدهمین حرف الفبای یونانی

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

نقشه

  • تابعی که یک تابع معین را برای هر آیتم یک تکرار شونده اعمال می کند و یک تکرار کننده را برمی گرداند.
  • این فراهم می کند یک سریعتر روشی برای تبدیل یک تکرارپذیر بر اساس شرایط داده شده.
  • می تواند چندین تکرار داشته باشد.

فیلتر

  • این دستور همان دستور تابع نقشه را دارد.
  • این به استخراج موارد از یک تکرار بر اساس شرایط داده شده کمک می کند.

کاستن

  • یک تابع را اعمال می کند به صورت تجمعی / متوالی روی هر آیتم از یک قابل تکرار و یک مقدار واحد را برمی گرداند.

Endnotes

این بحث امروز را کامل می کند. برای خواندن این مقاله از شما تشکر می کنم! امیدوارم از این مقاله لذت برده باشید و از خواندن آن به اندازه من در هنگام نوشتن آن لذت برده باشید 🙂

آیا چیزی مهم را از دست دادم یا می خواهم نظرات شما را به اشتراک بگذارم؟ در زیر نظر دهید، من به شما پاسخ خواهم داد.

درباره نویسنده

من Harsh Dhamecha هستم، دانشجوی سال آخر کارشناسی هوش مصنوعی، مربی یادگیری ماشین، و مشتاق دانشمند داده. من در مورد پایتون، یادگیری ماشین و یادگیری عمیق می نویسم.

اگر سؤالی دارید، می توانید مستقیماً پست الکترونیک من، خیلی خسته کننده، نه؟ آنجا داریم لینک و توییتر. من مرتباً در پایتون، یادگیری ماشینی، یادگیری عمیق و علم داده موضوعاتی می نویسم توییتر. برای به روز ماندن من را دنبال کنید!

می توانید نگاهی به آن داشته باشید مقالات دیگر من نوشته ام.

هنوز در حال خواندن این مقاله هستید؟ با تشکر ویژه از شما 🙌

رسانه های نشان داده شده در این مقاله متعلق به Analytics Vidhya نیستند و به صلاحدید نویسنده استفاده می شوند.

منبع: https://www.analyticsvidhya.com/blog/2021/10/an-explanation-to-pythons-lambda-map-filter-and-reduce/

تمبر زمان:

بیشتر از تجزیه و تحلیل Vidhya