متدهای ()map(), reduce و ()filter در پایتون ابزارهایی برای پردازش دادهها بهصورت کارآمد و تابعمحور هستند که امکان انجام عملیاتهای پیچیده روی دنبالهها (مانند لیستها، تاپلها یا دیگر مجموعهها) را فراهم میکنند. متد ()map برای اعمال یک تابع به هر عنصر از یک دنباله استفاده میشود و یک دنباله جدید حاوی نتایج را باز میگرداند. متد ()filter بهکار میرود تا تنها عناصری از دنباله که با یک شرط خاص منطبق هستند را انتخاب کند و نتایج را در قالب یک دنباله جدید ارائه دهد. در این مقاله به بررسی متدهای Map ، Reduce و Filter در پایتون میپردازیم.
مقدمه
متدهای Map ، Reduce و Filter در پایتون ابزارهای قدرتمندی برای پردازش دادهها بهصورت کارآمد و مختصر ارائه میدهند. این متدها با هدف تسهیل انجام عملیات تکراری روی دادهها طراحی شدهاند و به شما اجازه میدهند تا کدهایی خواناتر و تمیزتر بنویسید. این متدهای Map ، Reduce و Filter در پایتون علاوه بر سادهسازی عملیاتهای پیچیده، به کمک ترکیب با توابعی مانند lambda، کدنویسی را سریعتر و خلاصهتر میکنند. با این حال، برای درک بهتر عملکرد آنها، آشنایی با مفهوم توابع و ساختارهای iterable ضروری است.
متدهای Map ، Reduce و Filter در پایتون
در ادامه مثالهایی از متدهای Map ، Reduce و Filter در پایتون آورده شده است:
- تابع ()map
- تابع ()reduce
- تابع ()filter
متد Map در پایتون
متد Map در پایتون یک شی Map (Iterator) از نتایج را بازمیگرداند که پس از اعمال یک تابع مشخص بر روی هر عنصر از یک «Iterable» دادهشده (مانند لیست، تاپل و غیره) ایجاد میشود. این تابع به شما اجازه میدهد تا بهراحتی تغییرات مورد نظر را به تمامی عناصر دنباله اعمال کنید.
سینتکس:
map(fun, iter)
پارامترها:
- fun: متدی است که Map هر عنصر یک «Iterable» دادهشده را به آن ارسال میکند.
- iter: یک شی قابل تکرار «Iterable» که باید پردازش شود.
مثال: در این مثال، یک برنامه پایتون استفاده از متد map را نشان میدهد که با اعمال تابع double بر روی هر عنصر از یک لیست دادهشده، هر عدد را دو برابر میکند و سپس نتیجه را بهصورت یک لیست چاپ میکند.
# Function to return double of n def double(n): return n * 2 # Using map to double all numbers numbers = [5, 6, 7, 8] result = map(double, numbers) print(list(result))
خروجی:
[۱۰, ۱۲, ۱۴, ۱۶]
متد Reduce در پایتون
متد Reduce در پایتون برای اعمال یک تابع خاص که بهعنوان آرگومان به آن ارسال شده است، بر روی تمام عناصر لیستی که در دنباله ارائه شده است، استفاده میشود. این تابع در ماژول functools تعریف شده و با استفاده از آن میتوان عملیات تجمعی «aggregation» مانند جمع یا ضرب را بهصورت تدریجی بر روی عناصر دنباله انجام داد. نتیجه نهایی این عملیات بهصورت یک مقدار واحد بازمیگردد.
سینتکس:
reduce(func, iterable[, initial])
پارامترها:
fun: تابعی است که باید روی هر عنصر از شیء قابل تکرار «iterable» اجرا شود.
iter: یک شیء قابل تکرار است که باید کاهش یابد.
مثال: در این مثال، از تابع ()reduce از ماژول functools استفاده میکنیم تا حاصلضرب عناصر یک لیست دادهشده را محاسبه کنیم. این کار با استفاده از تابع Lambda که دو عدد را با هم ضرب میکند و بهطور مداوم اعمال میشود، انجام شده و نتیجهی نهایی حاصلضرب به دست میآید.
import functools # Define a list of numbers numbers = [1, 2, 3, 4] # Use reduce to compute the product of list elements product = functools.reduce(lambda x, y: x * y, numbers) print("Product of list elements:", product)
خروجی:
Product of list elements: 24
متد Filter در پایتون
متد Filter در پایتون دنبالهی دادهشده را با استفاده از یک تابع فیلتر میکند. این تابع هر عنصر در دنباله را بررسی میکند تا مشخص کند که آیا شرط برقرار است (True) یا خیر. در نهایت، فقط عناصری که شرط را برآورده میکنند در یک دنباله جدید نگهداری میشوند و بقیه از دنباله حذف میشوند.
سینتکس:
filter(function, sequence)
پارامترها:
function: تابعی که بررسی میکند آیا هر عنصر از دنباله شرط را برقرار میکند (True) یا خیر.
sequence: دنبالهای که باید فیلتر شود؛ میتواند مجموعهها «sets» ، لیستها «lists» ، تاپلها «tuples» یا هر نوع Container از Iterators باشد.
مثال: در این مثال، یک تابع به نام is_even تعریف شده است که بررسی میکند آیا یک عدد زوج است یا خیر. سپس، تابع ()filter روی یک لیست از اعداد اعمال میشود تا فقط اعداد زوج استخراج شوند و نتیجه بهصورت یک لیست شامل عناصر زوج بازگردانده میشود. در نهایت، لیست اعداد زوج چاپ میشود.
# Define a function to check if a number is even def is_even(n): return n % 2 == 0 # Define a list of numbers numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # Use filter to filter out even numbers even_numbers = filter(is_even, numbers) print("Even numbers:", list(even_numbers))
نتیجهگیری
این متدها ابزارهای قدرتمندی در برنامهنویسی تابعی هستند که برای پردازش دادهها به صورت مختصر و کارآمد طراحی شدهاند. متد ()map برای اعمال یک تابع روی هر عنصر از یک iterable (مثل لیست یا مجموعه) استفاده میشود و خروجی یک iterable جدید تولید میکند. این متد برای تبدیل دادهها مناسب است، مانند افزایش هر عنصر لیست به مقدار ۱. متد ()filter از این برای فیلتر کردن دادهها براساس یک شرط خاص استفاده میشود و تنها عناصری که شرط را ارضا میکنند در خروجی قرار میگیرند، مانند انتخاب اعداد زوج از یک لیست.
برای جمعبندی، این متدها کدنویسی را کوتاهتر و خواناتر میکنند و مناسب برای پردازش دادههای بزرگ و عملیاتهای تکراری هستند. درک نحوه عملکرد این متدها به تسهیل برنامهنویسی تابعی کمک میکند. برای کاربردهای پیچیدهتر یا دادههای بسیار بزرگ، استفاده از این متدها همراه با دیگر ابزارهای پیشرفته مانند NumPy یا Pandas توصیه میشود.