توابع Map و Filter در پایتون
توابع map
و filter
از توابع درونی (built-in) و مرتبه بالای پایتون هستند که برای پردازش مؤثر لیستها و دیگر اشیاء تکرارشونده (iterables) استفاده میشوند. این توابع به صورت lazy اجرا میشوند و خروجی آنها یک شیء iterable است، بنابراین برای مشاهده نتیجه، باید آن را به صراحت تبدیل به لیست یا نوع مناسب دیگری کرد.
تابع map
تابع map
دو آرگومان دریافت میکند: یک تابع و یک iterable. سپس آن تابع را روی تکتک عناصر iterable اعمال کرده و یک map object بازمیگرداند که میتوان آن را به لیست یا هر نوع دیگر تبدیل کرد.
def add_five(x):
return x + 5
nums = [11, 22, 33, 44, 55]
result = list(map(add_five, nums))
print(result) # خروجی: [16, 27, 38, 49, 60]
همان عملیات را میتوان به صورت فشرده با تابع لامبدا نیز نوشت:
nums = [11, 22, 33, 44, 55]
result = list(map(lambda x: x + 5, nums))
print(result)
کاربردهای رایج:
# تبدیل رشتهها به عدد
str_numbers = ['1', '2', '3', '4']
int_numbers = list(map(int, str_numbers)) # [1, 2, 3, 4]
# اعمال strip روی رشتهها
lines = [' apple ', 'banana ', ' cherry']
cleaned = list(map(str.strip, lines)) # ['apple', 'banana', 'cherry']
تابع filter
تابع filter
نیز دو آرگومان دریافت میکند: یک تابع شرطی (که باید خروجی بولی داشته باشد) و یک iterable. خروجی فقط شامل آیتمهایی است که تابع روی آنها مقدار True بازگرداند.
nums = [11, 22, 33, 44, 55]
evens = list(filter(lambda x: x % 2 == 0, nums))
print(evens) # خروجی: [22, 44]
کاربردهای رایج:
# فیلتر کردن مقادیر تهی
values = ["apple", "", "banana", None, "cherry", ""]
non_empty = list(filter(None, values)) # ['apple', 'banana', 'cherry']
# فیلتر کردن اعداد مثبت
nums = [-2, 0, 3, -1, 7]
positives = list(filter(lambda x: x > 0, nums)) # [3, 7]