如何将列表中的数字分块存储并创建另一个列表? [重复]

问题描述 投票:0回答:2

我有两个列表 x 和 y:

x = [2 3 1 1 2 5 7 3 6]
y = [0 0 4 2 4 5 8 4 5 6 7 0 5 3 2 8 1 3 1 0 4 2 4 5 4 4 5 6 7 0]

我想创建一个列表“z”,并希望将 y 中的数字组/块存储到 z 中,组的大小由 x 的值定义。

所以 z 将数字存储为

z = [[0,0],[4,2,4],[5],[8],[4,5],[6,7,0,5,3],[2,8,1,3,1,0,4],[2,4,5],[4,4,5,6,7,0]]

我尝试了这个循环:

h=[]
for j in x:
    h=[[a] for i in range(j) for a in y[i:i+1]]

但它只存储 x 的最后一个值。 另外我不确定这个问题的标题是否适合这个问题。如果令人困惑,任何人都可以编辑。非常感谢。

python list loops
2个回答
2
投票

每次循环都会重新分配

h
,因此最终只会得到最后一次迭代的分配。

您应该附加到它,而不是分配它。

start = 0
for j in x:
    h.append(y[start:start+j])
    start += j

2
投票

另一种方法是使用(并像你一样消费)

iterator
,如下所示:

x = [2, 3, 1, 1, 2, 5, 7, 3, 6]
y = [0, 0, 4, 2, 4, 5, 8, 4, 5, 6, 7, 0, 5, 3, 2, 8, 1, 3, 1, 0, 4, 2, 4, 5, 4, 4, 5, 6, 7, 0]

yi = iter(y)

res = [[next(yi) for _ in range(i)] for i in x]
print(res)  # -> [[0, 0], [4, 2, 4], [5], [8], [4, 5], [6, 7, 0, 5, 3], [2, 8, 1, 3, 1, 0, 4], [2, 4, 5], [4, 4, 5, 6, 7, 0]]

除了您面临的问题之外,作为生活的一般规则,请尝试为变量提供更有意义的名称。

© www.soinside.com 2019 - 2024. All rights reserved.