Python 如何填写;“锯齿状”;列表
我有以下“锯齿状”python列表:Python 如何填写;“锯齿状”;列表,python,list,Python,List,我有以下“锯齿状”python列表: lst = [[1, 'a', 2], ['b', 'c', 'd', 3, 4, 5], ['e']] 我想用0填充此列表中的“缺失”值,这样结果就是矩形数组: [[1, 'a', 2, 0, 0, 0], ['b', 'c', 'd', 3, 4, 5], ['e', 0, 0, 0, 0, 0]] 最好的方法是什么?使用itertools.zip\u longest,然后重新压缩结果 >>> lst = [[1, 'a', 2
lst = [[1, 'a', 2], ['b', 'c', 'd', 3, 4, 5], ['e']]
我想用0填充此列表中的“缺失”值,这样结果就是矩形数组:
[[1, 'a', 2, 0, 0, 0],
['b', 'c', 'd', 3, 4, 5],
['e', 0, 0, 0, 0, 0]]
最好的方法是什么?使用
itertools.zip\u longest
,然后重新压缩结果
>>> lst = [[1, 'a', 2], ['b', 'c', 'd', 3, 4, 5], ['e']]
>>> from itertools import zip_longest
>>> [list(x) for x in zip(*zip_longest(*lst, fillvalue=0))]
[[1, 'a', 2, 0, 0, 0], ['b', 'c', 'd', 3, 4, 5], ['e', 0, 0, 0, 0, 0]]
zip(*t)
是一个众所周知的用于转换列表列表的习惯用法;同样的技巧也适用于zip\u longest
。由于转置的转置是原始列表,因此将每个子列表填充到所需的长度
更详细地说,
>>> list(zip_longest(*lst, fillvalue=0))
[(1, 'b', 'e'), ('a', 'c', 0), (2, 'd', 0), (0, 3, 0), (0, 4, 0), (0, 5, 0)]
在这里,您可以看到第一个元素的元组,然后是第二个元素的元组,等等。当给定子列表中没有
i
th元素时,将使用0
。这可能对您的问题来说太难了,但可以有效地处理锯齿结构