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

时间:2017-11-20 23:44:34

标签: python list

我在Python 3.6工作,我是初学者。所以任何人都可以给我一个真正的方法,如何将列表切成可变大小的子列表。我尝试了这个网站的this解决方案,但它给了我固定大小的切片列表。澄清:

如果我有这个清单:

        textView = new TextView(this);
        textView.setText("You are in a dungeon.");
        textView.setMaxLines(4);

        textView.setMovementMethod(new ScrollingMovementMethod());

...
        tr2.addView(textView);
        TableRow.LayoutParams params = (TableRow.LayoutParams) textView.getLayoutParams();
        params.span = 6; //amount of columns you will span
        textView.setLayoutParams(params);

        tbl.addView(tr2);

我希望输出像例如:

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

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

3 个答案:

答案 0 :(得分:2)

只需使用itertools.islice()即可。这有一个额外的好处,如果你请求一个你通常会超出界限的切片,你就不会收到错误。你将获得尽可能多的物品。

>>> 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)会创建列表的可迭代内容,以便您可以使用k获取下一个islice()值。

答案 1 :(得分:1)

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

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

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

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)

打印:

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

答案 2 :(得分:0)

可能你只想学习切片。见Understanding Python's slice notation

要获得示例输出,您可以

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