Python:将不均匀的行转换为列

Del*_*taG 4 python list-comprehension reportlab

我有一个包含不均匀元素的列表列表:

[['a','b','c'], ['d','e'], [], ['f','g','h','i']]
Run Code Online (Sandbox Code Playgroud)

我在Reportlab中显示一个表,我想将它们显示为列.据我了解,RL只采用我上面的行格式表(Platypus)的数据.

我可以使用循环来进行切换,但我觉得有一个列表理解会更快更Pythonic.我也需要在用完元素的列中留一个空格.

所需的产品将是:

[['a','d','','f'],['b','e','','g'],['c','','','h'],['','','','i']]
Run Code Online (Sandbox Code Playgroud)

编辑:示例应该是字符串,而不是数字

谢谢您的帮助!

Tim*_*ker 11

itertools.izip_longest()采取fillvalue争论.在Python 3上,它是itertools.zip_longest().

>>> l = [[1,2,3], [4,5], [], [6,7,8,9]]
>>> import itertools
>>> list(itertools.izip_longest(*l, fillvalue=""))
[(1, 4, '', 6), (2, 5, '', 7), (3, '', '', 8), ('', '', '', 9)]
Run Code Online (Sandbox Code Playgroud)

如果确实需要子列表而不是元组:

>>> [list(tup) for tup in itertools.izip_longest(*l, fillvalue="")]
[[1, 4, '', 6], [2, 5, '', 7], [3, '', '', 8], ['', '', '', 9]]
Run Code Online (Sandbox Code Playgroud)

当然这也适用于字符串:

>>> l = [['a','b','c'], ['d','e'], [], ['f','g','h','i']]
>>> import itertools
>>> list(itertools.izip_longest(*l, fillvalue=""))
[('a', 'd', '', 'f'), ('b', 'e', '', 'g'), ('c', '', '', 'h'), ('', '', '', 'i')]
Run Code Online (Sandbox Code Playgroud)

它甚至像这样工作:

>>> l = ["abc", "de", "", "fghi"]
>>> list(itertools.izip_longest(*l, fillvalue=""))
[('a', 'd', '', 'f'), ('b', 'e', '', 'g'), ('c', '', '', 'h'), ('', '', '', 'i')]
Run Code Online (Sandbox Code Playgroud)