【发布时间】:2015-03-18 04:31:18
【问题描述】:
我想将以下元组列表中的数字 1、2、3 加在一起。我试过了:
reduce(lambda (x,y),(z,t): y+t,[('a',1),('b',2),('c',3)])
我得到一个错误:
TypeError: 'int' object is not iterable
如何解决此错误?谢谢
【问题讨论】:
我想将以下元组列表中的数字 1、2、3 加在一起。我试过了:
reduce(lambda (x,y),(z,t): y+t,[('a',1),('b',2),('c',3)])
我得到一个错误:
TypeError: 'int' object is not iterable
如何解决此错误?谢谢
【问题讨论】:
您正在尝试添加元组列表。因此,您的 lambda 必须返回一个元组(否则,您将如何将一个调用的结果添加到下一项?),并且您还必须使用一个元组的起始值。这样的工作:
reduce(lambda (x,y),(z,t): (0, y+t),[('a',1),('b',2),('c',3)], (0,0))[1]
您最终得到一个元组(0, 6),然后使用[1] 得到6。
如果这看起来很难看,那是因为reduce 不是一个很好的工具。 sum 使用生成器表达式效果更好:
sum(x[1] for x in [('a',1),('b',2),('c',3)])
【讨论】: