函数编程语言通常都会提供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))
说明:
map
函数是利用已有的函数和可迭代对象生成一个新的可迭代类型:map
类型map
的参数1是一个函数, 函数2是一个可迭代类型的数据.map
会获取迭代类型的每个数据, 传递给参数1的函数, 然后函数的返回值组成新的迭代类型的每个元素也可以有多个迭代器, 则参数1的函数的参数个数也会增加.
新生成的迭代器类型的元素的个数, 会和最短的那个迭代器的元素的个数保持一致.
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)