深入理解Python reduce函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Python reduce函数相关的知识,希望对你有一定的参考价值。

参考技术A

例如上面的例子,实现一个整形集合的累加。假设lst = [1,2,3,4,5],实现累加的方式有很多:

第一种:用sum函数。

sum(lst)
第二种:循环方式。

def customer_sum(lst):
result = 0
for x in lst:
result+=x
return result

def customer_sum(lst):
result = 0
while lst:
temp = lst.pop(0)
result+=temp
return result

if name ==" main ":
lst = [1,2,3,4,5]
print customer_sum(lst)
第三种:递推求和

def add(lst,result):
if lst:
temp = lst.pop(0)
temp+=result
return add(lst,temp)
else:
return result

if name ==" main ":
lst = [1,2,3,4,5]
print add(lst,0)
第四种:reduce方式

lst = [1,2,3,4,5]
print reduce(lambda x,y:x+y,lst)

lst = [1,2,3,4,5]
print reduce(lambda x,y:x+y,lst,0)

def add(x,y):
return x+y

print reduce(add, lst)

def add(x,y):
return x+y

print reduce(add, lst,0)

有一个序列集合,例如[1,1,2,3,2,3,3,5,6,7,7,6,5,5,5],统计这个集合所有键的重复个数,例如1出现了两次,2出现了两次等。大致的思路就是用字典存储,元素就是字典的key,出现的次数就是字典的value。方法依然很多

第一种:for循环判断

def statistics(lst):
dic =
for k in lst:
if not k in dic:
dic[k] = 1
else:
dic[k] +=1
return dic

lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print(statistics(lst))
第二种:比较取巧的,先把列表用set方式去重,然后用列表的count方法

def statistics2(lst):
m = set(lst)
dic =
for x in m:
dic[x] = lst.count(x)

lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print statistics2(lst)
第三种:用reduce方式

def statistics(dic,k):
if not k in dic:
dic[k] = 1
else:
dic[k] +=1
return dic

lst = [1,1,2,3,2,3,3,5,6,7,7,6,5,5,5]
print reduce(statistics,lst,)

或者
d =
d.extend(lst)
print reduce(statistics,d)

通过上面的例子发现,凡是要对一个集合进行操作的,并且要有一个统计结果的,能够用循环或者递归方式解决的问题,一般情况下都可以用reduce方式实现。

以上是关于深入理解Python reduce函数的主要内容,如果未能解决你的问题,请参考以下文章

深入理解 Python 的这 5个硬核函数

深入理解Python装饰器

python 深入理解yield

Python协程深入理解

Python协程深入理解

深入理解 Python yield