توابع map و filter

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

تابع map:

این تابع دو ورودی میگیرد: اولین ورودی یک تابع است و دومین ورودی، یک لیست، تاپل یا هر مقدار قابل شمارش دیگر است. کاری که map انجام می‌دهد این است که تمام مقادیر درون آرگومان دوم را به تابعی که در آرگومان اول معرفی کرده ایم پاس می‌دهد و نتایج را برمی‌گرداند.

به مثال زیر توجه کنید:

numbers = [2, 6, 8, 12, 22, 33, 44]

def plus5(n):
    return n+5

new_list = []
for i in numbers:
    new_list.append(plus5(i))

print(new_list)
# [۷, ۱۱, ۱۳, ۱۷, ۲۷, ۳۸, ۴۹]

مثال بالا برنامه ای است که یک لیست را گرفته و به مقادیر آن ۵ واحد اضافه میکند و آن را در یک لیست جدید برمیگرداند.

حال به جای استفاده از انباشتگر و حلقه for از تابع map استفاده میکنیم بطوری که تابع plus5 را بعنوان ورودی اول و لیست اعداد را بعنوان ورودی دوم وارد میکنیم:

numbers = [2, 6, 8, 12, 22, 33, 44]

def plus5(n):
    return n+5

new_list = map(plus5, numbers)
new_list = list(new_list)
print(new_list)
# [۷, ۱۱, ۱۳, ۱۷, ۲۷, ۳۸, ۴۹]

دقت داشته باشید که نتیجه برگردانده شده از map را حتما باید به لیست یا تاپل تبدیل کنیم.

در قسمت قبل با تابع lambda آشنا شدیم و یادگرفتیم چگونه توابع را کوتاه تر بنویسیم. در همین مثال میخواهیم تابع plus5 را بصورت lambda بنویسیم:

numbers = [2, 6, 8, 12, 22, 33, 44]
print(list(map(lambda n: n+5, numbers)))
# [۷, ۱۱, ۱۳, ۱۷, ۲۷, ۳۸, ۴۹]

تابع filter:

این تابع همانطور که از اسمش پیداست وظیفه دارد داده های یک لیست را فیلتر، یا به عبارتی جدا کند.  این تابع شبیه به تابع map میباشد، بعنوان اولین ورودی یک تابع میگیرد که مقدار True یا False را بر میگرداند و به عنوان دومین ورودی یک لیست میگیرد. تک تک مقادیر را روی تابع اعمال میکند و مادامی که تابع، نتیجه True را برمیگرداند، آن مقدار را نگه میدارد.

به مثال زیر توجه کنید:

numbers = [2, 6, 8, 12, 22, 33, 44]

def more_than_10(n):
    if n > 10: return True
    else: return False

new_list = list(filter(more_than_10, numbers))
print(new_list)
# [۱۲, ۲۲, ۳۳, ۴۴]

این برنامه مقادیر بزرگ تر از ۱۰ را بر میگرداند.

که میتوانیم به کمک lambda آن را کوتاه تر کنیم:

numbers = [2, 6, 8, 12, 22, 33, 44]
print(list(filter(lambda n: n>10, numbers)))
# [۱۲, ۲۲, ۳۳, ۴۴]

در جلسه بعد درمورد درمورد برنامه نویسی ماژولار در پایتون صحبت خواهیم کرد.

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *