Python:将列表拆分为定义大小的块,并填充其余部分
我想将我的列表拆分为具有相同列数的行,我正在寻找实现这一点的最佳(最优雅/最具Python风格)方法:Python:将列表拆分为定义大小的块,并填充其余部分,python,Python,我想将我的列表拆分为具有相同列数的行,我正在寻找实现这一点的最佳(最优雅/最具Python风格)方法: >>> split.split_size([1,2,3], 5, 0) [[1, 2, 3, 0, 0]] >>> split.split_size([1,2,3,4,5], 5, 0) [[1, 2, 3, 4, 5]] >>> split.split_size([1,2,3,4,5,6], 5, 0) [[1, 2, 3, 4, 5
>>> split.split_size([1,2,3], 5, 0)
[[1, 2, 3, 0, 0]]
>>> split.split_size([1,2,3,4,5], 5, 0)
[[1, 2, 3, 4, 5]]
>>> split.split_size([1,2,3,4,5,6], 5, 0)
[[1, 2, 3, 4, 5], [6, 0, 0, 0, 0]]
>>> split.split_size([1,2,3,4,5,6,7], 5, 0)
[[1, 2, 3, 4, 5], [6, 7, 0, 0, 0]]
到目前为止,我就是这么想的:
def split_size(l, size, fillup):
"""
splits list into chunks of defined size, fills up last chunk with fillup if below size
"""
# len(l) % size or size
# does i.e. size=5: 3->2, 4->1, 5->0
stack = l + [fillup] * (size - (len(l) % size or size))
result = []
while len(stack) > 0:
result.append(stack[:5])
del stack[:5]
return result
我相信一定有更聪明的解决办法。特别是对于“反向模式”部分:
透镜(l)%尺寸或尺寸
必须有一种更具可读性的方法才能做到这一点,不是吗?被调用的石斑鱼会做你想做的事情:
def grouper(n, iterable, fillvalue=None):
"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return izip_longest(fillvalue=fillvalue, *args)
重复:可能重复@Volting:我看到了另一个问题,它是相关的,但不一样,因为我想指定每个分割的大小。@NullUserException:答案确实是一样的,但问题不是:-)在2.6wow版中是新的,看看izip_最长的文档,我永远不会想到这个,非常感谢