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]

 

个人小记下,有什么不对的地方请指出,谢谢。

 

posted @ 2017-05-17 12:14  liown  阅读(101)  评论(0)    收藏  举报