Python 的 map() 函式用於對指定可迭代物的所有元素應用一個函式,並返回 map 物件。Python 的 map 物件是一個迭代器,因此我們可以遍歷其元素。我們還可以使用它們的工廠函式將 map 物件轉換為序列物件,如串列、元組等。
Python map() 函式
Python map() 函式的語法是:
map(function, iterable, ...)
我們可以將多個可迭代物作為參數傳遞給 map() 函式,此時指定的函式必須具有相同數量的參數。該函式將並行應用於這些可迭代物的元素。在有多個可迭代物參數的情況下,當最短的可迭代物用完時,map 迭代器將停止。
Python map() 範例
讓我們撰寫一個要與 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() 函數示例。
Python 中的 map() 與字符串
# map() 與字符串
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)
輸出:
<class 'map'>
A B C
Python 中的 map() 與元組
# map() 與元組
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)
輸出:
1 A ABC
Python 中的 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')
Python 中的 map() 與 lambda
我們可以使用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() with multiple iterable arguments
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
注意,我們的函數有兩個參數。輸出的map迭代器是將此函數應用於兩個可迭代元素的結果。讓我們看看當可迭代對象的大小不同時會發生什麼。
# map() with multiple iterable arguments of different sizes
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() with function 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
你可以從我們的 GitHub 存儲庫 檢查完整的 Python 腳本和更多 Python 示例。
參考:官方文檔
Source:
https://www.digitalocean.com/community/tutorials/python-map-function