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