python map 函数使用,遍历访问可迭代对象

󰃭 2017-08-07

1. 功能介绍

  • map 调用函数遍历可迭代对象,返回一个迭代器对象
  • map(function, iterable, …)
  • 可以传递多个迭代器对象给 map 的迭代函数,这个函数接收参数的个数必须和迭代对象个数相同

2. 例子讲解

下面的是一个使用 map 访问整形 list 的例子, 我们定义了一个整形 List,并且通过 Map 对 list 的每一项调用 square 函数来执行计算

#!/usr/bin/env python
# coding: utf-8

def square(x):   
    return x * x

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

nums_squared = map(square, nums)

for num in nums_squared:
    print(num)

这个 square() 函数计算参数的平方

def square(x):
    return x * x

我们定义了一个整数列表

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

这个 map 函数对列表的每一项效用 square() 函数

nums_squared = map(square, nums)

循环迭代打印结果

for num in nums_squared:
    print(num)

运行程序,输出结果

$ ./python_map.py 
1
4
9
16
25

3. Python map 的实现逻辑

下面的方法等价于与 map 调用,my_map 函数 与 map 实现相同的功能

#!/usr/bin/env python
# coding: utf-8

def square(x):
    return x * x

def my_map(func, iterable):
    for i in iterable:
        yield func(i)
                
nums = [1, 2, 3, 4, 5]

nums_squared = my_map(square, nums)

for num in nums_squared: 
    print(num)  

4. Python map 结合 lambda 使用

下面的例子使用 lambda 创建了一个匿名函数给 map 调用,计算列表元素的平方

#!/usr/bin/env python
# coding: utf-8

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

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

for num in nums_squared:
    print(num)

5. Python map 使用多个迭代器参数

我们前面提到过,可以传递多个迭代器参数给 map 的函数调用,下面的例子传递了两个整数列表,用两个列表提供的值相乘

#!/usr/bin/env python
# coding: utf-8

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)

这个函数必须接收两个参数,因为有两个可迭代的 list 传递给 map

#!/usr/bin/env python
# coding: utf-8

def multiply(x, y):
    return x * y

运行结果如下

$ ./python_map_iterables.py 
6
14
24
36
50

6. Python map 迭代多个函数

这个例子展示如何在map中使用多个函数,我们对整数列表同时使用了加法和乘法函数

#!/usr/bin/env python
# coding: utf-8

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)

我们循环访问整数 list,在每次循环中我们调用 add() 和 square() 函数,创建了一个 2 个值的 list 结果

for i in nums:
    vals = list(map(lambda x: x(i), (add, square)))
    print(vals)

每一行的第一个值是加法结果,第二个值是乘法结果

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

7. Python list 列表推导式

python map() 与列表推导式可以实现相同的功能,这个例子用列表推导式创建了一个平方值列表

#!/usr/bin/env python
# coding: utf-8

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)