如何在程序中添加列表的总和?(python)
比如说,如何在程序中添加列表的总和?(python),python,list,sum,Python,List,Sum,比如说, a = ([1,2,3],[4,5,6],[7,8,9]) 返回的总和应=45,以嵌套方式使用: >>> a = ([1,2,3],[4,5,6],[7,8,9]) >>> sum(sum(x) for x in a) 45 >>> # This also works >>> sum(map(sum, a)) 45 >>> 如果需要,这里有一个on和一个on的引用。使用sum函数 s = 0
a = ([1,2,3],[4,5,6],[7,8,9])
返回的总和应=45,以嵌套方式使用:
>>> a = ([1,2,3],[4,5,6],[7,8,9])
>>> sum(sum(x) for x in a)
45
>>> # This also works
>>> sum(map(sum, a))
45
>>>
如果需要,这里有一个on和一个on的引用。使用sum函数
s = 0
for i in a:
s += sum(i)
print s
这假设列表只包含充满数字的列表。如果你想变得更聪明,你需要做一个函数
print reduce (lambda x, y: x + y, map(sum,a))
mapsum,a给出:[6,15,24]
lambda x,y:x+y是一个将输入x,y相加的函数
将各条目的总和减至45
此外,基于相同的前提,summapsum、a也可以使用更简单的语法,但是reduce和lambda仍然是需要了解的好东西。这里还有一个尚未提出的答案:
from itertools import chain
a = ([1,2,3],[4,5,6],[7,8,9])
sum(chain(*a))
这将使用与以下各项相加的总和:
生成一个迭代器,从第一个iterable返回元素,直到
它已耗尽,然后继续下一个iterable,直到所有
人们都筋疲力尽了。用于将连续序列作为一个整体处理
单一序列。相当于:
def chain(*iterables):
# chain('ABC', 'DEF') --> A B C D E F
for it in iterables:
for element in it:
yield element
通过将*a传递给链,a被展开,使其成员成为链的参数
sum(chain([1,2,3], [4,5,6], [7,8,9])
最后我们得到了一个平坦的列表,实际上,它是可折叠的,相当于
sum([1, 2, 3, 4, 5, 6, 7, 8, 9])
sum([] + [1,2,3] + [4,5,6] + [7,8,9])
内部总和通过将子列表添加到空列表中来展平列表-相当于
sum([1, 2, 3, 4, 5, 6, 7, 8, 9])
sum([] + [1,2,3] + [4,5,6] + [7,8,9])
你能解释一下链式函数吗?看起来不错..我明白了。。很好的功能。我喜欢使用reduce,但不喜欢map。那么reducelambda total,next:total+sumnext,a,0@PeterGibson似乎不必要地令人费解。地图怎么了?我是一个粉丝,习惯map-reduce范例很好。python上的map构建了一个新的列表,这个列表可能会很慢,而且有点占用内存。不过我还是同意这更简单。事实上,看起来Python 3中不再是这种情况,所以我收回我的建议:@PeterGibson是的,他们改变了地图,可能是为了更好。