您的位置:首页 > 编程语言 > Python开发

map,zip,reduce,lambda函数学习笔记

2017-04-23 18:50 337 查看
上面4个函数,虽然都知道具体的含义,但是有时候很少会想起来用这几个函数。用的恰到好处的话,确实使代码看起来更简洁易懂。
如果有个列表字典
dic1 = [{'a':'A'},{'b':'B'},{'d':'D'},{'c':'C'}]
想要把这个列表中的字典全部合并的话,可以用以下代码实现


b = dic1[0]
for i in range(1,4):
b = dict(b,**dic1[i])
----------------------------------
如果用reduce,map和lambda函数结合就更简洁了
dic = {}
for i in map(lambda x:dic.update(x),dic1):
print(dic)
out:
{'a': 'A'}
{'a': 'A', 'b': 'B'}
{'a': 'A', 'b': 'B', 'd': 'D'}
{'a': 'A', 'b': 'B', 'd': 'D', 'c': 'C'}

如果用reduce就更加简洁,
dic = OrderedDict()    #如果你想要输出是输入的顺序,字典是无序的,虽然上面的没有有序字典看似也是有序,但是我用不同的ide结果就是不同
reduce(lambda x,y:dic.update(y),dic1,{})   #from functools import reduce
out :
dic = {'a': 'A', 'b': 'B', 'd': 'D', 'c': 'C'}


map(lambda x:dic.update(x),dic1)

reduce和map函数接收的参数比较相似,接收一个函数和一个列表(reduce可以有第3个参数作为计算的初始的值,如果没有,就以list中的中的第一个元素作为x)。下面把reduce拆解就能明白了。
reduce(lambda x,y:dic.update(y),dic1,{})
==>
lambda x,y:dic.update(y)  其实就等于
def fun(x,y):
return dic.update(y),x
所以,第一步执行x = {},y = dic1[0]代入到 fun({},dic1[0]) ,dic 就变成 {'a': 'A'},然后在fun(fun({},dic1[0]),dic1[1]),一直计算到最后一个
#reduce( func, [1, 2,3] ) = func( func(1, 2), 3)


zip函数一般将2个列表合并

for i in zip([1,2,3],[4,5]):

print(i)

out:

(1, 4)

(2, 5)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python reduce lambda