Python的map()函数

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

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() 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_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()函数

如果我们不想重复使用函数,我们可以在map()中使用lambda函数。当我们的函数很小且不想定义一个新的函数时,这是非常有用的。

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 

当参数的大小不同时,将应用映射函数到元素,直到其中一个参数用尽。

Python中使用函数None的map()函数

我们看看当将函数设置为 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示例。

参考:官方文档