在用整数列表创建子列表时,有没有一种优雅的方法在最后一个子列表中填充零?
到目前为止,我已经有了这个oneliner,需要用2个零填充最后一个子列表
[lst[x:x+3] for x in range(0, len(lst), 3)]
例如
lst =[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
结果应为:
[1,2,3][4,5,6][7,8,9][10,0,0]
答案 0 :(得分:4)
使用itertools.zip_longest
,使用从列表中创建的相同迭代器,并将缺少的值填充为0:
[[*i] for i in itertools.zip_longest(*[iter(lst)] * 3, fillvalue=0)]
示例:
In [1219]: lst =[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [1220]: [[*i] for i in itertools.zip_longest(*[iter(lst)] * 3, fillvalue=0)]
Out[1220]: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 0, 0]]
答案 1 :(得分:2)
没有itertools
:
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print([lst[x:x+3]+[0]*(x-len(lst)+3) for x in range(0, len(lst), 3)])
打印:
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 0, 0]]