Python map() 函数

Python的map()函数用于对指定可迭代对象的所有元素应用一个函数,并返回一个map对象。Python的map对象是一个\textit{迭代器},因此我们可以遍历其元素。我们还可以使用它们的工厂函数将map对象转换为序列对象,如\textit{list}、\textit{tuple}等。

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)

# 使用列表的map()

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()
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()
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

你可以从我们的 GitHub 仓库查看完整的 Python 脚本和更多 Python 示例。

参考:官方文档

Source:
https://www.digitalocean.com/community/tutorials/python-map-function