在Python3中交织多个可变长度列表

时间:2019-07-19 12:09:30

标签: python-3.x

这个答案https://stackoverflow.com/a/7947190/5517459给出:

sandbox="allow-scripts allow-same-origin allow-forms"

此代码段完全符合我的项目要求,但在python3中不起作用。

我使用以下方法解决了错误:

>>> l1=[1,2,3]
>>> l2=[10,20,30]
>>> l3=[101,102,103,104]
>>> [y for x in map(None,l1,l2,l3) for y in x if y is not None]
[1, 10, 101, 2, 20, 102, 3, 30, 103, 104]

但是它现在无法处理变长列表,现在一旦耗尽最短列表就停止运行。

2 个答案:

答案 0 :(得分:1)

您似乎需要itertools.zip_longest

from itertools import zip_longest
l1=[1,2,3]
l2=[10,20,30]
l3=[101,102,103,104]

print([y for x in zip_longest(l1,l2,l3, fillvalue=None) for y in x if y is not None])

输出:

[1, 10, 101, 2, 20, 102, 3, 30, 103, 104]

答案 1 :(得分:1)

如果它们是列表,则还可以用None填充所有列表:

longest_len = max(len(l1), len(l2), len(l3))
zipped_lists = zip(
    l1+[None]*(longest_len-len(l1)),
    l2+[None]*(longest_len-len(l2)),
    l3+[None]*(longest_len-len(l3)))
modules = [y for x in zipped_lists for y in x if y is not None]