合并固定长度的多个列表

lea*_*ner 1 python

如何将固定长度的多个列表合并在一起,以获得在特定位置具有最新值的单个列表.在下面的示例中,结果将是[1,33,222,3333,11111].

l1 = [1,    "", 111,    "", 11111]
l2 = ["",   22, 222,    2222,   ""]
l3 = ["",   33, "", 3333,   ""]
l4 = ....
l5 = ...
....
Run Code Online (Sandbox Code Playgroud)

有没有内置功能来做到这一点.我可以使用两个循环来完成它,但必须有一些其他聪明的方法来做同样的事情

Roh*_*ain 5

您可以在元组上使用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)