创建子列表时填充

时间:2019-07-01 17:51:49

标签: python list

在用整数列表创建子列表时,有没有一种优雅的方法在最后一个子列表中填充零?

到目前为止,我已经有了这个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]

2 个答案:

答案 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]]