python-map/zip/reduce/filter
之前一直没有搞清楚这几个内置函数到底有什么区别,今天小记下。
自己先把map/zip分成一对,reduce/filter成一对,因为后两个只能传一个sequence
先看map的help说明
help(map) Help on built-in function map in module __builtin__: map(...) map(function, sequence[, sequence, ...]) -> list
map栗子
project = [{"project": 1}, {"project": 2}]
storage = [{"sys": "windows", "uuid": "835e6868-3ab1-11e7-9fbe-484d7eabbda0"}, {"sys": "linux", "uuid": "ba6d76fa-3ab1-11e7-9fbe-484d7eabbda0"}]
network = [{"ip": "10.0.0.1", "id": 3}, {"ip": "10.0.0.2", "id": 4}]
def f(x,y,z):
x.update(y)
x.update(z)
return x
map(f, project, storage, network)
结果
[{'project': 1,
'sys': 'windows',
'id': 3,
'uuid': '835e6868-3ab1-11e7-9fbe-484d7eabbda0',
'ip': '10.0.0.1'},
{'project': 2,
'sys': 'linux',
'id': 4,
'uuid': 'ba6d76fa-3ab1-11e7-9fbe-484d7eabbda0',
'ip': '10.0.0.2'}]
map中函数的参数个数由sequence的个数而定,返回函数计算后的结果。
但每个sequence的元素个数必须相同,不然会报错。
project = [{"project": 1}]
map(f, project, storage, network)
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 2, in f
TypeError: 'NoneType' object is not iterable
zip比较简单,直接跳过吧。
reduce
函数的入参必须是两个,大家常看的用法就是阶乘了。
reduce(lambda x,y:x*y, range(1,5), 2) 48
后面的2是计算的初始值,可选参数,像这样:2×1×2×3×4
filter
过滤sequence中的值,根据函数返回的true/false
filter(lambda x: x>2, range(5)) [3, 4]
如果是计算根本没有什么用,这时候就要用map了
filter(lambda x: x+2, range(5)) [0, 1, 2, 3, 4]
个人小记下,有什么不对的地方请指出,谢谢。

浙公网安备 33010602011771号