我想从数字列表中获得一个总计。
出于演示目的,我首先使用range
依次列出数字
a = range(20)
runningTotal = []
for n in range(len(a)):
new = runningTotal[n-1] + a[n] if n > 0 else a[n]
runningTotal.append(new)
# This one is a syntax error
# runningTotal = [a[n] for n in range(len(a)) if n == 0 else runningTotal[n-1] + a[n]]
for i in zip(a, runningTotal):
print "{0:>3}{1:>5}".format(*i)
产量
0 0
1 1
2 3
3 6
4 10
5 15
6 21
7 28
8 36
9 45
10 55
11 66
12 78
13 91
14 105
15 120
16 136
17 153
18 171
19 190
如您所见,我在每个循环迭代中初始化一个空列表
[]
,然后初始化append()
。有没有更优雅的方法,例如列表理解? 最佳答案
列表推导没有很好的方法(干净,可移植)来引用其正在构建的列表。一种好的,优雅的方法可能是在生成器中完成该工作:
def running_sum(a):
tot = 0
for item in a:
tot += item
yield tot
要获得此列表,当然可以使用
list(running_sum(a))
。