مقدمه
تابع map() یکی از توابع داخلی و قدرتمند پایتون است که برای اعمال یک عملیات مشخص روی تمامی عناصر یک مجموعه داده (مانند لیست، تاپل یا سایر iterableها) استفاده میشود. این تابع به شما کمک میکند کدهای کوتاهتر، خواناتر و بهینهتری برای پردازش دادهها بنویسید.
در حوزه تحلیل داده، یادگیری ماشین، پردازش متن و اتوماسیون، map() ابزاری بسیار کاربردی برای تبدیل و دستکاری دادهها به شمار میرود.
تابع map چیست؟
تابع map() یک تابع را روی تکتک عناصر یک iterable اجرا کرده و نتیجه را بهصورت یک شیء map برمیگرداند.
ساختار کلی
map(function, iterable)
پارامترها
function: تابعی که روی هر عنصر اجرا میشود.iterable: مجموعه دادهای که قرار است پردازش شود.
مقدار بازگشتی
یک شیء از نوع map که میتوان آن را به لیست، تاپل یا سایر ساختارهای داده تبدیل کرد.
مثال ساده
فرض کنید میخواهیم تمامی اعداد یک لیست را دو برابر کنیم:
numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x * 2, numbers)
print(list(result))
خروجی:
[2, 4, 6, 8, 10]
استفاده از تابع معمولی بهجای Lambda
def square(x):
return x ** 2
numbers = [1, 2, 3, 4]
result = map(square, numbers)
print(list(result))
خروجی:
[1, 4, 9, 16]
پردازش رشتهها با map
تبدیل همه حروف به حروف بزرگ:
names = ["ali", "sara", "reza"]
result = map(str.upper, names)
print(list(result))
خروجی:
['ALI', 'SARA', 'REZA']
استفاده از چند iterable
تابع map() میتواند چند iterable را همزمان پردازش کند.
a = [1, 2, 3]
b = [4, 5, 6]
result = map(lambda x, y: x + y, a, b)
print(list(result))
خروجی:
[5, 7, 9]
تبدیل نوع دادهها
تبدیل لیست رشتهها به اعداد صحیح:
numbers = ["1", "2", "3", "4"]
result = map(int, numbers)
print(list(result))
خروجی:
[1, 2, 3, 4]
استفاده از map در پردازش داده
فرض کنید دادههای فروش به صورت رشته ذخیره شدهاند:
sales = ["1200", "3400", "2800", "5000"]
sales_int = list(map(int, sales))
print(sales_int)
خروجی:
[1200, 3400, 2800, 5000]
ترکیب map و lambda
یکی از رایجترین کاربردها:
prices = [100, 200, 300]
with_tax = list(map(lambda x: x * 1.09, prices))
print(with_tax)
خروجی:
[109.0, 218.0, 327.0]
استفاده از map با اشیاء (Objects)
class Product:
def __init__(self, name):
self.name = name
products = [
Product("Laptop"),
Product("Phone"),
Product("Tablet")
]
names = list(map(lambda p: p.name, products))
print(names)
خروجی:
['Laptop', 'Phone', 'Tablet']
تفاوت map و List Comprehension
استفاده از map:
result = list(map(lambda x: x * 2, numbers))
استفاده از List Comprehension:
result = [x * 2 for x in numbers]
هر دو نتیجه یکسانی تولید میکنند، اما بسیاری از توسعهدهندگان برای خوانایی بیشتر از List Comprehension استفاده میکنند.
مزایای استفاده از map
- کاهش حجم کد
- خوانایی بهتر در عملیاتهای تکراری
- عملکرد مناسب در پردازش داده
- سازگاری با توابع داخلی پایتون
- امکان ترکیب با
lambda
معایب map
- برای افراد مبتدی ممکن است خوانایی کمتری داشته باشد.
- در عملیاتهای پیچیده، List Comprehension معمولاً واضحتر است.
- شیء map به صورت Lazy Evaluation عمل میکند و برای مشاهده نتایج باید آن را به لیست یا ساختار دیگری تبدیل کنید.
Lazy Evaluation چیست؟
تابع map() نتایج را از قبل محاسبه نمیکند و فقط هنگام نیاز آنها را تولید میکند.
numbers = [1, 2, 3]
mapped = map(lambda x: x * 2, numbers)
print(mapped)
خروجی:
<map object at 0x...>
برای مشاهده دادهها:
print(list(mapped))
map در پروژههای واقعی
از map() میتوان در موارد زیر استفاده کرد:
- پاکسازی دادهها (Data Cleaning)
- تبدیل فرمت دادهها
- پردازش فایلهای CSV
- پردازش دادههای API
- تبدیل دادهها پیش از ذخیره در پایگاه داده
- پروژههای یادگیری ماشین و تحلیل داده
نتیجهگیری
تابع map() یکی از ابزارهای مهم پایتون برای پردازش و تبدیل دادهها است. این تابع با اعمال یک عملیات روی تمام عناصر یک مجموعه داده، کدنویسی را سادهتر و ساختارمندتر میکند. هرچند در برخی سناریوها List Comprehension خواناتر است، اما map() همچنان یکی از بهترین گزینهها برای پردازش داده در پایتون محسوب میشود.
از همراهی شما با پارمین کلود سپاسگزاریم.
نظرات کاربران