如何在特定点分隔列表?

时间:2015-07-13 21:50:27

标签: python

我有:

Z = [2, 3, 2]
M = [2, 6, 3, 1, 5, 8, 3]

我想根据M列表将列表Z分开,如:

l = [[2, 6], [3, 1, 5], [8, 3]]

我试过了:

z = 0
l = list()
for i, z in enumerate(M):
    if z == Z[0]:
        l.append(M[z:i+1])
        z = i+1
        del Z[0]
    z = z+1

但后来我获得了一个空列表l=[]

3 个答案:

答案 0 :(得分:0)

切片列表应该会更容易,下面的代码完成了这项工作:

idx = 0
l = []
for z in Z:
    l.append(M[idx:idx+z])
    idx += z

此处idx会跟踪已处理的元素数量。为了更好地工作,我们需要sum(Z) == len(M)

答案 1 :(得分:0)

您可以执行以下操作(假设我正确理解您的问题):

M = [2, 6, 3, 1, 5, 8, 3]
Z = [2, 3, 2]
l=[]

for z in Z:
    l.append(M[0:z])
    del M[0:z]

为您提供所需的输出:

[[2, 6], [3, 1, 5], [8, 3]]

因此,您基本上只需遍历Z,将z的第一个Z元素附加到您的列表l,然后从列表M中删除这些元素

答案 2 :(得分:0)

import itertools
M = [2, 6, 3, 1, 5, 8, 3]
Z = [2, 3, 2]

[M[x[1]-x[0]:x[1]] for x in zip(Z,itertools.accumulate(Z))]

输出:

[[2, 6], [3, 1, 5], [8, 3]]