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)