我有一个整数列表:
list = [a,b,c,d]
Run Code Online (Sandbox Code Playgroud)
我想将它转换为这些范围:
0..a
a+1..a+b
a+b+1..a+b+c
a+b+c+1..a+b+c+d
Run Code Online (Sandbox Code Playgroud)
任何想法如何在python中做到这一点?
谢谢
一个简单的生成器将:
def to_ranges(seq):
iseq = iter(seq)
x = next(iseq)
yield range(0,x+1)
start = x
for x in iseq:
stop = start+x
yield range(start+1,stop+1)
start = stop
for x in to_ranges([1,2,3,4]):
print x
Run Code Online (Sandbox Code Playgroud)
这给出了:
[0, 1] #0 .. a check
[2, 3] #a+1 (2) .. a+b (1+2=3) check
[4, 5, 6] #a+b+1 (1+2+1=4) .. a+b+c (1+2+3=6) check
[7, 8, 9, 10] #a+b+c+1 (1+2+3+1=7) .. a+b+c+d (1+2+3+4=10) check
Run Code Online (Sandbox Code Playgroud)
终于做对了.不幸的是,由于0边界条件,第一个循环是特殊的 - 所以我们只需要展开那个循环,所有这些都与世界一致.