# Python 映射

> 原文： [http://zetcode.com/python/map/](http://zetcode.com/python/map/)

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

## Python `map()`函数

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

```py
map(function, iterable, ...)

```

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

## Python 映射示例

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

`python_map.py`

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

```py
def square(x):

    return x * x

```

`square()`函数平方其参数。

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

```

我们定义一个整数列表。

```py
nums_squared = map(square, nums)

```

`map()`函数将`square()`函数应用于`nums`列表的每个元素。

```py
for num in nums_squared:

    print(num)

```

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

```py
$ ./python_map.py 
1
4
9
16
25

```

这是输出。

## 等效的 Python 映射

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

`mymap_fun.py`

```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`

```py
#!/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`

```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)

```

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

```py
def multiply(x, y):

    return x * y

```

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

```py
$ ./python_map_iterables.py 
6
14
24
36
50

```

这是输出。

## Python 映射多个函数

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

`python_map_multiple_funcs.py`

```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()`函数应用于整数值列表。

```py
for i in nums:

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

    print(vals)

```

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

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

```

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

## Python 列表推导式

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

`python_list_comprehension.py`

```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 列表推导式从整数列表创建平方值列表。

在本教程中，我们使用了 Python `map()`函数。

您可能也会对以下相关教程感兴趣： [Python 教程](/lang/python/)， [Python 集教程](/python/set/)， [Python 列表推导](/articles/pythonlistcomprehensions/)， [OpenPyXL 教程](/articles/openpyxl/)，[Python Requests 教程](/web/pythonrequests/)和 [Python CSV 教程](/python/csv/)。