Python map()函数
时间:2020-02-23 14:42:59 来源:igfitidea点击:
Python map()函数用于将函数应用于指定的iterable的所有元素,并返回map对象。
Python map对象是一个迭代器,因此我们可以对其元素进行迭代。
我们还可以使用其工厂函数将映射对象转换为序列对象,例如列表,元组等。
Python map()函数
Python map()函数语法为:
map(function, iterable, ...)
我们可以将多个可迭代参数传递给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() with string map_iterator = map(to_upper_case, 'abc') print(type(map_iterator)) print_iterator(map_iterator)
输出:
<class 'map'> A B C
带元组的Python map()
# map() with tuple 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_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')
带有lambda的Python 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() 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() 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()无
让我们看看将函数作为None传递时会发生什么。
map_iterator = map(None, 'abc') print(map_iterator) for x in map_iterator: print(x)
输出:
Traceback (most recent call last): File "/Users/hyman/Documents/github/theitroad/Python-3/basic_examples/python_map_example.py", line 3, in <module> for x in map_iterator: TypeError: 'NoneType' object is not callable