python3 map、reduce、filter 的区别

在 Python 中有一种编程模式叫做函数式编程,使用的就是 map、reduce、filter 这样的高阶函数

map(遍历序列):接收两个参数,一个是函数,一个是 Iterablemap 将传入的函数依次作用到序列的每个元素,并把结果作为新的 Iterator 返回

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

d1 = map(str, range(10))
print(type(d1))
print(list(d1))

d2 = map(lambda x: x*x, range(1, 11))
print(type(d2))
print(list(d2))

运行结果:

Geek-Mac:Downloads zhangyi$ python3 Nice.py 
<class 'map'>
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
<class 'map'>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Geek-Mac:Downloads zhangyi$ python2.7 Nice.py 
<type 'list'>
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
<type 'list'>
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

在 Python2 中,map 返回是一个 list,在 Python3 中返回是 iterators,所以想要使用,需要将 iterator 转换成 list 即可

比如 list(map())

 

reduce(累计函数):对于序列内所有元素进行累计操作,这个函数必须接收两个参数,reduce 把结果继续和序列的下一个元素做累积计算

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

from functools import reduce

d = reduce(lambda x, y: x+y, range(1, 11))
print(d)

运行结果:

Geek-Mac:Downloads zhangyi$ python3 Nice.py 
55

因为在 Python3 中,已经将内置的 移除了,所以使用之前必须先导入标准库 functools 中的 reduce

 

filter(筛选函数):filter 接收一个函数和一个序列,函数依次作用于每个元素,然后根据返回值是 True 还是 False 决定保留还是丢弃该元素

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

d = filter(lambda x: x%2==0, range(1, 11))
print(list(d))

运行结果:

Geek-Mac:Downloads zhangyi$ python3 Nice.py 
[2, 4, 6, 8, 10]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值