在Python中切片具有可变块大小的列表

Slicing a list with variable chunk size in Python

本问题已经有最佳答案,请猛点这里访问。

我在python 3.6工作,我是一个初学者。所以谁能给我一个真正的方法,如何才能切片成可变大小的子列表列表。我从这个站点尝试了这个解决方案,但它给了我固定大小的切片列表。澄清:

如果我有这个清单:

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

我希望输出如下:

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

每次都取决于(例如)用户输入或某些可变大小。


只需使用itertools.islice()。这还有一个额外的优点,即如果您请求一个通常会使您越界的切片,则不会得到错误。你会得到尽可能多的物品。

1
2
3
4
5
6
7
>>> import itertools as it
>>> input_list = range(8)
>>> slices = (3, 2, 1, 2)
>>> iterable = iter(input_list)
>>> output_list = [list(it.islice(iterable, sl)) for sl in slices]
>>> output_list
[[0, 1, 2], [3, 4], [5], [6, 7]]

例如,如果您有slices = (3, 2, 1, 3, 2),您的结果将是[[0, 1, 2], [3, 4], [5], [6, 7], []]

基本上,iter(input_list)创建列表中的一个iterable,这样您就可以用islice()获取下一个k值。


您可以使用python的[:#]slice表示法在循环中执行此操作:

假设用户的切片块大小输入存储在一个列表中。它们需要3、2、1和2的块,因此定义块的用户输入被存储到一个具有[3,2,1,2]的列表中。

然后,遍历该列表并使用它来获取切片:

1
2
3
4
5
6
7
input_list = [0,1,2,3,4,5,6,7]
chunk_list = [3,2,1,2]
output_list = []
for i in chunk_list:
    output_list.append(input_list[:i])
    input_list = input_list[i:]
print(output_list)

印刷品:

1
[[0, 1, 2], [3, 4], [5], [6, 7]]


也许你只是想学习切片。请参见了解Python的切片表示法

要获得示例输出,可以

1
outputList = [inputList[:3], inputList[3:5], inputList[5:6], inputList[6:]]