הפונקציה map() של פייתון משמשת להחיל פונקציה על כל האיברים באוסף המסוים ולהחזיר אובייקט מפה. אובייקט מפה בפייתון הוא מאיץ, כך שנוכל לעבור על איבריו. נוכל גם להמיר אובייקט מפה לאובייקטי רצפים כמו רשימה, טופל וכו' באמצעות פונקציות הייצור שלהם.
פונקציית map() של פייתון
התחביר של פונקציית map() של פייתון הוא:
map(function, iterable, ...)
נוכל להעביר ארגומנטים מרובים של iterable לפונקציית map(), במקרה כזה, הפונקציה המצויה חייבת לקבל את מספר הארגומנטים המתאים. הפונקציה תיווש באיברי ה-iterable הללו באופן מקבילי. עם ארגומנטים מרובים של iterable, איטרטור המפה עוצר כאשר ה-iterable הקצר ביותר נגמר.
דוגמת map() בפייתון
בואו נ Esכותב פונקציה לשימוש עם פונקציית map().
def to_upper_case(s):
return str(s).upper()
זו פונקציה פשוטה שמחזירה את המחרוזת הגדולה של אובייקט הקלט. אני גם מגדיר פונקציית עזר להדפסת איברי האיטרטור. הפונקציה תדפיס איברי איטרטור עם רווח לבן ותשמש שוב בכל קטעי הקוד.
def print_iterator(it):
for x in it:
print(x, end=' ')
print('') # for new line
נבחן דוגמה של פונקציית map() עם סוגים שונים של iterable.
map() של פייתון עם מחרוזת
# map() עם מחרוזת
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)
פלט:
<class 'map'>
A B C
map() של פייתון עם טאפל
# map() עם טאפל
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)
פלט:
1 A ABC
map() של פייתון עם רשימה
map_iterator = map(to_upper_case, ['x', 'a', 'abc'])
print_iterator(map_iterator)
פלט:
X A ABC
המרת map לרשימה, טאפל, סט
מאחר שאובייקט map הוא איטרטור, אנו יכולים להעביר אותו כארגומנט לשיטות היצירה של רשימה, טאפל, סט וכו'.
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_list = list(map_iterator)
print(my_list)
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_set = set(map_iterator)
print(my_set)
map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_tuple = tuple(map_iterator)
print(my_tuple)
פלט:
['A', 'B', 'C']
{'C', 'B', 'A'}
('A', 'B', 'C')
map() של פייתון עם למבדה
אנו יכולים להשתמש בפונקציות lambda עם map() אם אנו לא רוצים להשתמש בה שוב. זה שימושי כאשר הפונקציה שלנו קטנה ואנו לא רוצים להגדיר פונקציה חדשה.
list_numbers = [1, 2, 3, 4]
map_iterator = map(lambda x: x * 2, list_numbers)
print_iterator(map_iterator)
פלט:
2 4 6 8
Python map() עם ארגומנטים מרובים
בואו נסתכל על דוגמה של שימוש בפונקציה map() עם ארגומנטים מרובים מסוגים שונים.
# map() עם ארגומנטים מרובים מסוגים שונים
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)
פלט: 5 12 21 32
שימו לב שהפונקציה שלנו מקבלת שני ארגומנטים. התוצאה של ה-iterator של map היא תוצאת החישוב של הפונקציה על שני האיברים המרובים באופן מקבילי. בואו נראה מה קורה כאשר ה-iterables הם בגדלים שונים.
# map() עם ארגומנטים מרובים מסוגים שונים בגדלים שונים
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8, 9, 10)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)
map_iterator = map(lambda x, y: x * y, tuple_numbers, list_numbers)
print_iterator(map_iterator)
פלט:
5 12 21 32
5 12 21 32
כך שכאשר הארגומנטים הם בגדלים שונים, אז הפונקציה של map מיושם על האיברים עד שאחד מהם מושם.
Python map() עם פונקציה None
בואו נראה מה קורה כאשר אנו מעבירים את הפונקציה כ-None.
map_iterator = map(None, 'abc')
print(map_iterator)
for x in map_iterator:
print(x)
פלט:
Traceback (most recent call last):
File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_map_example.py", line 3, in <module>
for x in map_iterator:
TypeError: 'NoneType' object is not callable
אתה יכול לבדוק את קובץ הסקריפט המלא של Python ודוגמאות נוספות בקובץ הGitHub שלנו.
התייחסות: תיעוד רשמי
Source:
https://www.digitalocean.com/community/tutorials/python-map-function