Python:如何将列表拼接为给定长度的子列表?

时间:2019-03-22 07:25:41

标签: python list

x = [2, 1, 2, 0, 1, 2, 2]

我想将以上列表拼接为length = [1, 2, 3, 1]的子列表。换句话说,我希望我的输出看起来像这样:

[[2], [1, 2], [0, 1, 2], [2]]

第一个子列表的长度为1,第二个子列表的长度为2,依此类推。

3 个答案:

答案 0 :(得分:9)

您可以在此处使用itertools.islice来每次迭代消耗N个源列表中的许多元素,例如:

from itertools import islice

x = [2, 1, 2, 0, 1, 2, 2]
length = [1, 2, 3, 1]
# get an iterable to consume x
it = iter(x)
new_list = [list(islice(it, n)) for n in length]

给你:

[[2], [1, 2], [0, 1, 2], [2]]

答案 1 :(得分:0)

基本上,我们要提取一定长度的子字符串。 为此,我们需要一个start_index和一个end_index。 end_index是您的start_index +我们要提取的当前长度:

x = [2, 1, 2, 0, 1, 2, 2]    
lengths = [1,2,3,1]

res = []
start_index = 0
for length in lengths:
    res.append(x[start_index:start_index+length])
    start_index += length

print(res)  # [[2], [1, 2], [0, 1, 2], [2]]

将此解决方案添加到其他答案中,因为它不需要任何导入的模块。

答案 2 :(得分:0)

您可以使用以下listcomp:

from itertools import accumulate

x = [2, 1, 2, 0, 1, 2, 2]
length = [1, 2, 3, 1]

[x[i - j: i] for i, j in zip(accumulate(length), length)]
# [[2], [1, 2], [0, 1, 2], [2]]