Python map() 函數

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