函数编程语言通常都会提供map, filter, reduce三个高阶函数.

在python3中, map和filter仍然是内置函数, 但是由于引入了列表推导和生成器表达式, 他们变得没有那么重要了.

列表推导和生成器表达式具有了map和filter两个函数的功能, 而且更易于阅读.


map

a = map(lambda x: x ** 2, [10, 20, 30, 40])
print(list(a))
print(type(a))

说明:

  1. map函数是利用已有的函数和可迭代对象生成一个新的可迭代类型:map类型

  2. map的参数1是一个函数, 函数2是一个可迭代类型的数据. map会获取迭代类型的每个数据, 传递给参数1的函数, 然后函数的返回值组成新的迭代类型的每个元素

  3. 也可以有多个迭代器, 则参数1的函数的参数个数也会增加.

  4. 新生成的迭代器类型的元素的个数, 会和最短的那个迭代器的元素的个数保持一致.

a = map(lambda x, y: x + y, [10, 20, 30, 40], [100, 200])
print(list(a))

使用列表推倒实现上面的功能

使用列表比map优雅了很多, 而且也避免了参数1的函数

list1 = [10, 20, 30, 40]

list3 = [x ** 2 for x in list1]

print(list3)

list1 = [10, 20, 30, 40]
list2 = [100, 200]

# 注意:列表推倒中这里是使用的笛卡尔积
list3 = [x + y for x in list1 for y in list2]

print(list3)


filter

对已有的可迭代类型起过滤作用, 然后生成新的可迭代类型

用法和map类型, 参数1也是函数, 会把当返回值为True的元素添加到新的可迭代类型中.

list1 = [0, 1, 3, 4, 9, 4, 7]
# 把奇数元素取出来
print(list(filter(lambda x: x % 2 == 1, list1)))

# 列表推倒的版本
list2 = [x for x in list1 if x % 2 == 1]
print(list2)

Copyright © 李振超 2018 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-02-25 07:12:09

results matching ""

    No results matching ""