列表理解总计 [英] List comprehension for running total
本文介绍了列表理解总计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从数字列表中得出连续的总数.
I want to get a running total from a list of numbers.
出于演示目的,我先使用range
For demo purposes, I start with a sequential list of numbers using 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()
.有没有更优雅的方法,例如列表理解?
As you can see, I initialize an empty list []
, then append()
in each loop iteration. Is there a more elegant way to this, like a list comprehension?
推荐答案
列表理解没有很好的(干净,可移植的)方式来引用其正在构建的列表.一种好的,优雅的方法可能是在生成器中完成这项工作:
A list comprehension has no good (clean, portable) way to refer to the very list it's building. One good and elegant approach might be to do the job in a generator:
def running_sum(a):
tot = 0
for item in a:
tot += item
yield tot
要获取此列表,请使用list(running_sum(a))
.
to get this as a list instead, of course, use list(running_sum(a))
.
这篇关于列表理解总计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文