python sum函数forloop

时间:2011-12-19 09:46:37

标签: python sum

我只是想知道..如何在for循环中总结不同的元素?

for element in [(2,7),(9,11)] :
        g=sum(element[1]-element[0]+1)
        print g

如果我删除' sum',我得到:

6
3

6 个答案:

答案 0 :(得分:11)

我不确定你想要得到什么。是这个吗?

>>> print sum(element[1]-element[0]+1 for element in [(2,7), (9,11)])
9

generator expression相当于

temp = []
for element in [(2,7), (9,11)]:
    temp.append(element[1]-element[0]+1)
print sum(temp)

但它避免在内存中构建列表,因此效率更高。

答案 1 :(得分:3)

您可以将其替换为generator expression

In [20]: sum(element[1] - element[0] + 1 for element in [(2, 7), (9, 11)])
Out[20]: 9

这可以简化为:

In [21]: sum(y - x + 1 for x,y in [(2, 7), (9, 11)])
Out[21]: 9

...我觉得更容易阅读,并保证列表中的每个元素都有两个元素。并且它不使用不必要的lambdas。

答案 2 :(得分:2)

>>> sum(right-left+1 for left,right in [(2,7),(9,11)])
9

答案 3 :(得分:1)

您可以使用lambda函数将列表映射到总和列表中,如下所示:

list_of_tuples = [(2,4),(5,7)]
list_of_sums = map(lambda x: x[0]+x[1], list_of_tuples)

还有许多其他方法可以做同样的事情,但如果你从未使用过map或lambda函数,那么这是学习它们的好机会;)

答案 4 :(得分:1)

最简单的方法:

sum(map(lambda (x,y): y-x+1 , [(2,7),(9,11)]))

答案 5 :(得分:0)

这是你所指的吗?

g = 0
for element in [(2,7),(9,11)] :
         g= g + (element[1]-element[0]+1)
         print g 

sum仅接受iterable对象

<强>更新

g = 0
for element in [(2,7),(9,11)] :
         g += (element[1]-element[0]+1)
print g # moved indention to show the sum