تابع map و lambda
map چیست؟
- یک تابع رو روی همه عناصر یک لیست (یا هر iterable دیگه) اعمال میکنه
- جایگزین سریعتر و خواناتر برای نوشتن یک حلقه
forساده جهت تغییر همه عناصر
سینتکس
map(function, iterable)مثال ساده: مقایسه با for
# روش قبلی با for
numbers = [1, 2, 3, 4]
squares = []
for n in numbers:
squares.append(n ** 2)
print(squares)# همون کار با map
numbers = [1, 2, 3, 4]
squares = list(map(lambda n: n ** 2, numbers))
print(squares)[1, 4, 9, 16]
نکته مهم: خروجی map یک map object است
- باید با
list()،tuple()یا حلقه، به چیز قابلاستفاده تبدیلش کنیم
result = map(lambda n: n * 2, [1, 2, 3])
print(result) # <map object at 0x...>
print(list(result)) # [2, 4, 6]استفاده با تابع معمولی (نه فقط lambda)
def to_upper(word):
return word.upper()
words = ['salam', 'khoobi']
print(list(map(to_upper, words)))['SALAM', 'KHOOBI']
map روی چند لیست همزمان
a = [1, 2, 3]
b = [10, 20, 30]
result = list(map(lambda x, y: x + y, a, b))
print(result)[11, 22, 33]
map در مقابل list comprehension
| روش | مثال |
|---|---|
map |
list(map(lambda n: n**2, numbers)) |
| list comprehension | [n**2 for n in numbers] |
- هر دو یک نتیجه میدن؛ list comprehension معمولاً در پایتون خواناتر و رایجتره، ولی
mapوقتی یک تابع از قبل تعریفشده داریم (نه lambda)، خیلی خلوتتره