例如,
a = ([1,2,3],[4,5,6],[7,8,9])
返回的总和应该= 45
答案 0 :(得分:4)
以嵌套方式使用sum
:
>>> 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
>>>
如果您需要,请参阅map
以及generator expressions上的参考。
答案 1 :(得分:3)
这是另一个尚未提出的答案:
from itertools import chain
a = ([1,2,3],[4,5,6],[7,8,9])
sum(chain(*a))
这会将sum
与itertools.chain():
创建一个迭代器,返回第一个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])
答案 2 :(得分:1)
使用和函数
s = 0
for i in a:
s += sum(i)
print s
答案 3 :(得分:1)
a = ([1,2,3],[4,5,6],[7,8,9])
total = 0
for i in a:
total += sum(i)
这假定列表中只包含满是数字的列表。如果你想比这更聪明,你需要做一个功能。
答案 4 :(得分:1)
print reduce (lambda x, y: x + y, map(sum,a))
map(sum, a)
给出:[6, 15, 24]
lambda x,y: x + y
是一个添加输入x
,y
的函数
reduce
将条目加在一起得到45。
此外,基于相同的前提,sum(map(sum,a))
也可以使用更简单的语法,但reduce
和lambda
仍然是值得了解的好事。
答案 5 :(得分:0)
a = [1,2,3],[4,5,6],[7,8,9]
sum(sum(a, []))
内部sum
通过将子列表添加到空列表来展平列表 - 相当于
sum([] + [1,2,3] + [4,5,6] + [7,8,9])