跳转至

Python 映射

Python 映射 教程介绍了 Python 内置的map()函数。

Python map()函数

Python map()内置函数将给定函数应用于可迭代的每一项,并返回一个迭代器对象。

map(function, iterable, ...)

可以将多个迭代传递给map()函数。 该函数必须采用与可迭代项一样多的参数。

Python 映射示例

以下示例在整数列表上使用 Python map()

python_map.py
#!/usr/bin/python3

def square(x):

    return x * x

nums = [1, 2, 3, 4, 5]

nums_squared = map(square, nums)

for num in nums_squared:

    print(num)

我们定义一个整数列表,并使用map()在列表的每个元素上应用square()函数。

1
2
3
def square(x):

    return x * x

square()函数平方其参数。

nums = [1, 2, 3, 4, 5]

我们定义一个整数列表。

nums_squared = map(square, nums)

map()功能将square()功能应用于nums列表的每个元素。

1
2
3
for num in nums_squared:

    print(num)

我们遍历返回的 iterable 并打印元素。

1
2
3
4
5
6
$ ./python_map.py 
1
4
9
16
25

这是输出。

等效的 Python 映射

以下示例显示了与 Python 3 map()函数等效的自定义。

mymap_fun.py
#!/usr/bin/python3

def square(x):

    return x * x

def mymap(func, iterable):

    for i in iterable:
        yield func(i)

nums = [1, 2, 3, 4, 5]

nums_squared = mymap(square, nums)

for num in nums_squared:

    print(num)  

mymap()与 Python 3 map()做相同的事情。

带 lambda 的 Python 映射

下一个示例使用lambda运算符在map()内部创建一个匿名函数。

python_map_lambda.py
1
2
3
4
5
6
7
8
#!/usr/bin/python3

nums = [1, 2, 3, 4, 5]

nums_squared = map(lambda x: x*x, nums)

for num in nums_squared:
    print(num)

该代码示例将列表元素与map()平方在一起,并将匿名函数与lambda创建。

具有多个可迭代项的 Python 映射

前面已经提到过,我们可以将多个可迭代对象传递给map()

python_map_iterables.py
#!/usr/bin/python3

def multiply(x, y):

    return x * y

nums1 = [1, 2, 3, 4, 5]
nums2 = [6, 7, 8, 9, 10]

mult = map(multiply, nums1, nums2)

for num in mult:
    print(num)

在代码示例中,有两个持有整数的可迭代对象。 来自两个可迭代对象的值相乘。

1
2
3
def multiply(x, y):

    return x * y

该函数必须带有两个参数,因为有两个可迭代变量传递给map()

1
2
3
4
5
6
$ ./python_map_iterables.py 
6
14
24
36
50

这是输出。

Python 映射多个函数

在下一个示例中,我们显示如何在 Python map()中使用多个函数。

python_map_multiple_funcs.py
#!/usr/bin/python3

def add(x):
    return x + x

def square(x):
    return x * x

nums = [1, 2, 3, 4, 5]

for i in nums:

    vals = list(map(lambda x: x(i), (add, square)))

    print(vals)

在示例中,我们将add()square()函数应用于整数值列表。

1
2
3
4
5
for i in nums:

    vals = list(map(lambda x: x(i), (add, square)))

    print(vals)

我们遍历 for 循环中的元素。 在每个循环中,我们创建两个值的列表,这些值是通过对值应用add()square()函数来计算的。

1
2
3
4
5
6
$ ./python_map_multiple_funcs.py 
[2, 1]
[4, 4]
[6, 9]
[8, 16]
[10, 25]

第一个值通过加法形成,第二个值通过乘法形成。

Python 列表推导式

Python map()的功能也可以通过 Python 列表推导式来实现。

python_list_comprehension.py
#!/usr/bin/python3

def square(x):

    return x * x

nums = [1, 2, 3, 4, 5]

nums_squared = [square(num) for num in nums]

for num in nums_squared:

    print(num)

该示例使用 Python 列表推导式从整数列表创建平方值列表。