我试图找到一个元组中所有整数的总数
from functools import reduce
marks = [("Jon" ,29 ), ("santi",35), ("anna",35)]
Total_marks = lambda x,y: x[1]
print(marks)
print (reduce(Total_marks,marks))
上面的代码可以采用整数的第一个值,但是我想找到所有整数的总和,如何在python中使用reduce来实现
答案 0 :(得分:3)
更改加法函数的定义(此处无需使用lambda表示法):
def total_marks(x, y):
return x + y[1]
通过提供第三个可选参数,告诉reduce
初始值是一个数字,而不是一个元组:
reduce(total_marks, marks, 0)
#99
与lambda相同的解决方案:
reduce(lambda x,y: x+y[1], marks, 0)
还有另一种不使用reduce
的解决方案:
_, y = zip(*marks)
sum(y)
#99
答案 1 :(得分:3)
如果没有必要使用reduce,那么一个更优雅的解决方案是
marks = [("Jon" ,29 ), ("santi",35), ("anna",35)]
total_marks = sum(score for _, score in marks)
print(total_marks)
答案 2 :(得分:2)
您将使用operator.itemgetter(1)
将数字从元组中取出,并将reduce
与operator.add
进行求和
from functools import reduce
from operator import itemgetter, add
marks = [("Jon" ,29 ), ("santi",35), ("anna",35)]
print(reduce(add, map(itemgetter(1), marks)))
# 99
没有reduce
的简单解决方案是sum(mark for name, mark in marks)
答案 3 :(得分:1)
您可以检查第一个参数(x
)是否为元组:
from functools import reduce
marks = [("Jon" ,29 ), ("santi",35), ("anna",35)]
new_marks = reduce(lambda x, y:(x if isinstance(x, int) else x[-1])+y[-1], marks)
assert new_marks == sum(b for _, b in marks)
print(new_marks)
输出:
99