تابع map در پایتون یکی از ابزارهای قدرتمند و کاربردی برای پردازش دادهها است که به شما اجازه میدهد یک تابع مشخص را به طور مؤثر به هر عنصر از یک iterable (مانند لیست، تاپل و غیره) اعمال کنید. این تابع با ایجاد یک شیء map (که یک iterator است)، نتایج را به صورت تنبلانه تولید میکند، به این معنی که محاسبات فقط در صورت نیاز انجام میشود. از آنجایی که map میتواند چندین iterable را به صورت همزمان پردازش کند، میتواند به طور قابل توجهی کدهای پیچیده را ساده کرده و خوانایی آنها را بهبود بخشد. ترکیب `map()` با توابع lambda و تبدیل نتایج آن به لیست یا مجموعه، امکان انجام عملیات پیچیده و متنوعی را در پایتون فراهم میکند. برای آشنایی با نسخههای مختلف پایتون میتوانید تاریخچه پایتون را مطالعه کنید.
نحوه استفاده از تابع `map()` در پایتون
سینتکس:
map(fun, iter)
پارامترها:
- fun: تابعی است که `map` هر عنصر از iterable داده شده را به آن ارسال میکند.
- iter: iterable ای است که باید به تابع map داده شود.
نکته: شما میتوانید یک یا چند iterable را به تابع `map()` ارسال کنید.
خروجی:
لیستی از نتایج پس از اعمال تابع داده شده به هر آیتم از یک iterable داده شده (لیست، تاپل و غیره) را بازمیگرداند.
نکته: مقدار بازگشتی از تابع map (شیء map) میتواند به توابعی مانند list (برای ایجاد لیست) یا set (برای ایجاد مجموعه) داده شود.
مثالهایی از استفاده از تابع map در پایتون
در این مثال، ما عملکرد تابع map را در پایتون نشان میدهیم.
python
برنامه پایتون برای نشان دادن عملکرد map
بازگرداندن دو برابر n
def addition(n):
return n + n
دو برابر کردن همه اعداد با استفاده از map()
numbers = (1, 2, 3, 4)
result = map(addition, numbers)
print(list(result))
خروجی:
\[2, 4, 6, 8\]
استفاده از map() با عبارتهای lambda
ما همچنین میتوانیم از عبارتهای lambda با map برای دستیابی به نتیجهی مشابه استفاده کنیم. در این مثال، ما از map با عبارت lambda استفاده میکنیم.
python
دو برابر کردن همه اعداد با استفاده از map و lambda
numbers = (1, 2, 3, 4)
result = map(lambda x: x + x, numbers)
print(list(result))
خروجی:
\[2, 4, 6, 8\]
افزودن دو لیست با استفاده از map و lambda
در این مثال، ما از map و lambda برای افزودن دو لیست استفاده میکنیم.
python
افزودن دو لیست با استفاده از map و lambda
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
result = map(lambda x, y: x + y, numbers1, numbers2)
print(list(result))
خروجی:
\[5, 7, 9\]
تغییر رشته با استفاده از تابع map در پایتون
در این مثال، ما از تابع `map()` برای تغییر رشته استفاده میکنیم. ما میتوانیم یک map از یک iterable در پایتون ایجاد کنیم.
python
لیست رشتهها
l = ['sat', 'bat', 'cat', 'mat']
map() میتواند لیست رشتهها را به صورت فردی به لیست تبدیل کند
test = list(map(list, l))
print(test)
خروجی:
\[ \['s', 'a', 't'\], \['b', 'a', 't'\], \['c', 'a', 't'\], \['m', 'a', 't'\] \]
پیچیدگی زمانی: O(n)، جایی که n تعداد عناصر در لیست ورودی `l` است.
پیچیدگی کمکی: O(n)
استفاده از if با تابع map در پایتون
در این مثال، تابع `double_even()` اعداد زوج را دو برابر میکند و اعداد فرد را بدون تغییر میگذارد. تابع `map()` برای اعمال این تابع بر روی هر عنصر لیست `numbers` استفاده شده و از عبارت `if` درون تابع برای اجرای منطق شرطی مورد نیاز استفاده شده است.
python
تعریف تابعی که اعداد زوج را دو برابر کرده و اعداد فرد را بدون تغییر میگذارد
def double_even(num):
if num % 2 == 0:
return num * 2
else:
return num
ایجاد لیستی از اعداد برای اعمال تابع بر روی آنها
numbers = [1, 2, 3, 4, 5]
استفاده از map برای اعمال تابع بر روی هر عنصر لیست
result = list(map(double_even, numbers))
چاپ نتیجه
print(result) [1, 4, 3, 8, 5]
خروجی:
\[1, 4, 3, 8, 5\]
پیچیدگی زمانی: O(n)
پیچیدگی کمکی: O(n)
نتیجهگیری
تابع map در برنامهنویسی پایتون به عنوان یک ابزار قدرتمند برای تغییر دادهها به صورت کارآمد و مختصر عمل میکند. با اعمال یک تابع بر روی هر آیتم در یک iterable، map خوانایی کد را سادهتر کرده و بهرهوری را افزایش میدهد. چه شما در حال کار با لیستها، تاپلها یا سایر iterableها باشید، تسلط بر map شما را قادر به نوشتن کد پایتون تمیزتر و بیانیتر میکند.
سوالات متداول دربارهی تابع map در پایتون
چگونه از تابع `map()` پایتون با lambda استفاده کنیم؟
میتوانید از تابع `map()` همراه با یک تابع lambda برای اعمال آن تابع به هر عنصر از یک iterable استفاده کنید. در اینجا یک مثال آورده شده است:
python
numbers = [1, 2, 3, 4, 5]
squared = map(lambda x: x2, numbers)
در این مثال، map تابع lambda `lambda x: x2` را به هر عنصر از لیست `numbers` اعمال میکند و یک iterator (شیء map) شامل مقادیر مربعشده تولید میکند.
چگونه تابع map پایتون را به لیست تبدیل کنیم؟
میتوانید شیء `map()` را با استفاده از `list()` به لیست تبدیل کنید. به عنوان مثال:
python
squared_list = list(squared)
این کد شیء `map` به نام `squared` (که شامل مقادیر مربعشدهی لیست `numbers` است) را به یک لیست به نام `squared_list` تبدیل میکند.
یک مثال ساده از تابع `map()` در پایتون چیست؟
یک مثال ساده با استفاده از `map()` بدون استفاده از lambda:
python
def double(x):
return 2 * x
numbers = [1, 2, 3, 4, 5]
doubled = map(double, numbers)
در اینجا، `map()` تابع `double` را به هر عنصر از لیست `numbers` اعمال میکند و یک iterator (شیء map) شامل مقادیر دو برابر شده تولید میکند.
چگونه از تابع `map()` پایتون با چندین آرگومان استفاده کنیم؟
میتوانید از `map()` همراه با چندین iterable و یک تابع که چندین آرگومان میپذیرد، استفاده کنید. برای مثال:
python
numbers1 = [1, 2, 3]
numbers2 = [4, 5, 6]
added = map(lambda x, y: x + y, numbers1, numbers2)
در اینجا، map تابع lambda `lambda x, y: x + y` را به جفتهایی از عناصر لیستهای numbers1 و numbers2 اعمال میکند و یک iterator (شیء map) شامل مجموع مقادیر تولید میکند.
چه اتفاقی میافتد وقتی تابع `map()` پایتون بر روی یک لیست اعمال شود؟
وقتی map بر روی یک لیست اعمال میشود، یک شیء `map` که یک iterator است برمیگرداند. این iterator نتایج را به صورت lazy (تنبلانه) برگردانده و زمانی که به آنها نیاز باشد تولید میکند. برای دریافت نتایج به صورت لیست، معمولاً شیء map را با استفاده از list تبدیل میکنید.
ورود و ثبت نام برای ارسال نظر وارد شوید
¶ ممنون از مقالهی خوبتون، من هنوز تابع map رو نخونده بودم و مقاله دید خوبی بهم داد.
ورود و ثبت نام برای ارسال نظر وارد شوید