如何将固定长度的多个列表合并在一起,以获得在特定位置具有最新值的单个列表.在下面的示例中,结果将是[1,33,222,3333,11111].
l1 = [1, "", 111, "", 11111]
l2 = ["", 22, 222, 2222, ""]
l3 = ["", 33, "", 3333, ""]
l4 = ....
l5 = ...
....
Run Code Online (Sandbox Code Playgroud)
有没有内置功能来做到这一点.我可以使用两个循环来完成它,但必须有一些其他聪明的方法来做同样的事情
您可以在元组上使用zip(l1, l2, l3)然后or运算符:
[tup[2] or tup[1] or tup[0] for tup in zip(l1, l2, l3)]
Run Code Online (Sandbox Code Playgroud)
oroperator返回第一个true值.由于您需要最后一个真值,因此您需要or反向应用元组元素上的运算符.
或者您可以zip反向列出,并按or顺序使用运算符:
[tup[0] or tup[1] or tup[2] for tup in zip(l3, l2, l1)]
Run Code Online (Sandbox Code Playgroud)
更新:
而不是可变数量的列表,我建议你list of list改为.在这种情况下,您可以得到如下结果:
li = [[1, "", 111, "", 11111],
["", 22, 222, 2222, ""],
["", 33, "", 3333, ""], ..... so on
]
print [reduce(lambda a, b: a or b, tup) for tup in zip(*li[::-1])]
Run Code Online (Sandbox Code Playgroud)