列表从两个不同长度列表([2*n]和[2*m])到[3*len(唯一(n [0],m [0]))]的单个列表的列表理解

chr*_*ina 1 python list-comprehension python-3.x

鉴于列表:

a = [
 [2, 10  ],
 [3, 120],
 [4, 30 ]
]

b = [
 [1, 10 ],
 [2, 40]
]
Run Code Online (Sandbox Code Playgroud)

我怎么能使用列表理解,压缩,最小/最大,连接,枚举,izip_longest,map和/或lambda来返回左变量排序的第三个列表,左变量的重复项连接成一行,保持原始列表在中间位置和最后位置的位置.假设a将始终处于中间位置,并且b将始终位于最后位置,因为a并且b可能具有不同的长度.

c = [
 [1, None, 10   ],
 [2, 10  , 40   ],
 [3, 120 , None ],
 [4, 30  , None ]
]
Run Code Online (Sandbox Code Playgroud)

对于一行复制/粘贴

a = [[2, 0],[3, 120],[4, 30]]
b = [[1, 0],[2, 40]]
c = [[1, None, 0],[2, 0, 40],[3, 120 , None],[4, 30, None]]
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.在一个令人垂涎的单行之后,我迷失了方向,以帮助我理解蟒蛇大师的思维方式!

wim*_*wim 7

使用链图+列表理解:

>>> from collections import ChainMap
>>> c = ChainMap(dict(a), dict(b))
>>> [[k] + [d.get(k) for d in c.maps] for k in c]
[[1, None, 0], [2, 0, 40], [3, 120, None], [4, 30, None]]
Run Code Online (Sandbox Code Playgroud)

它很容易推广到以这种方式使用2个以上的输入列表.