我有:
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=[]
答案 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]]