Python制作列表

时间:2015-05-01 07:04:32

标签: python arrays list for-loop iteration

我是python中的超级n00b。 我一直在努力寻找合适的解决方案。 以下是列表L = [0, 0, 0, 3, 4, 5, 6, 0, 0, 0, 0, 11, 12, 13, 14, 0, 0, 0, 18, 19, 20],每个项目都指向列表中的位置。

我想从上面的列表中创建列表,在列表中显示较小的列表,每个元素表示系列的起始位置,系列的结尾和元素的数量。这应该是[[3, 6, 4], [11, 14, 4], [18, 20, 3]]。我怎么能为此编写代码?以下是我到目前为止所做的工作。

target = []
target.append([])
target.append([])
target.append([])

L = [0,0,0,0,4,5,6,7,8,9,0,0,0,13,14,15,0,0,0,19,20,21]

for i in L :
    if i == 0 :
        L.remove(i)
        continue
    elif i != 0 :
        startpoint = i
        i = i * i
        while i != 0 :
            i += 1
            continue
        else :
            j = i
            endpoint = i - 1
            break
    target[0].append(startpoint)
    target[1].append(endpoint)
    target[2].append(j)

1 个答案:

答案 0 :(得分:2)

关于您的代码,一个错误就是跟随while

while i != 0 :
        i += 1

你不能增加i你需要增加元素的索引而不是它自己!然后当你找到一个非零元素时继续追加!

但是作为一种更加pythonic的方式你可以使用itertools.groupby列表理解:

>>> from itertools import groupby
>>> [[i[0],i[-1],len(i)] for i in [list(g) for _,g in groupby(L,key=lambda x:x!=0)]if i[0]!=0]
[[3, 6, 4], [11, 14, 4], [18, 20, 3]]

注意 groupby将分组的元素作为生成器(g)返回,当您想要循环它时,您不需要将其转换为{{1}但在这种情况下,我们需要长度,我们必须转换为list,直到我们可以使用list函数。