我在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]
每次取决于(例如)用户输入或某些可变大小。
答案 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:]]