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