我有一个这样的列表:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
我希望它看起来像这样
[['a', 'b', 'c'],['d', 'e', 'f'],['g', 'h', 'i']]
最有效的方法是什么?
编辑: 走另一条路怎么样?
[['a', 'b', 'c'],['d', 'e', 'f'],['g', 'h', 'i']]
-->
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
最佳答案
您可以通过简单的列表理解来做您想做的事。
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> [a[i:i+3] for i in range(0, len(a), 3)]
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
如果你想填充最后一个子列表,你可以在列表理解之前这样做:
>>> padding = 0
>>> a += [padding]*(3-len(a)%3)
将这些组合成一个函数:
def group(sequence, group_length, padding=None):
if padding is not None:
sequence += [padding]*(group_length-len(sequence)%group_length)
return [sequence[i:i+group_length] for i in range(0, len(sequence), group_length)]
换个方向:
def flatten(sequence):
return [item for sublist in sequence for item in sublist]
>>> a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> flatten(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
关于python 将字符串每隔 3 个值拆分一次,但拆分为嵌套格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22932552/