从列表中生成总计范围

bio*_*f80 2 python list range

我有一个整数列表:

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中做到这一点?

谢谢

mgi*_*son 9

一个简单的生成器将:

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边界条件,第一个循环是特殊的 - 所以我们只需要展开那个循环,所有这些都与世界一致.