>>> L = [[[10, 15, 200, 220], [10, 15, 200, 220], 0.0],
... [[10, 15, 200, 220], [20, 25, 200, 230], 17.320508075688775],
... [[110, 150, 240, 300], [10, 15, 200, 220], 190.3286631067428],
... [[110, 150, 240, 300], [100, 150, 230, 300], 14.142135623730951],
... [[110, 150, 240, 300], [110, 150, 240, 300], 0.0]]
Вы можете отфильтровать списки списков на последнем элементе с пониманием списка:
>>> [M for M in L if M[-1]<50]
[[[10, 15, 200, 220], [10, 15, 200, 220], 0.0], [[10, 15, 200, 220], [20, 25, 200, 230], 17.320508075688775], [[110, 150, 240, 300], [100, 150, 230, 300], 14.142135623730951], [[110, 150, 240, 300], [110, 150, 240, 300], 0.0]]
Теперь, чтобы объединить предыдущие списки, вы можете использовать zip (я добавил фильтр на0
, что подразумевается желаемым выводом):
>>> [[max(*xs) for xs in zip(*M[:-1])] for M in L if 0<M[-1]<50]
[[20, 25, 200, 230], [110, 150, 240, 300]]
Объяснение: идея состоит в том, чтобы сжать списки, например:
>>> list(zip([10, 15, 210, 220], [10, 25, 200, 250]))
[(10, 10), (15, 25), (210, 200), (220, 250)]
И взять самый большой элемент кортежей:
>>> [max(x,y) for x,y in zip([10, 15, 210, 220], [10, 25, 200, 250])]
[10, 25, 210, 250]
Я использовал оператор звездочки, чтобы сделать код более гибким: он не зависит от количества списков:
>>> list(zip([10, 15, 210, 220], [10, 25, 200, 250], [15, 20, 210, 260]))
[(10, 10, 15), (15, 25, 20), (210, 200, 210), (220, 250, 260)]
>>> [max(*xs) for xs in zip([10, 15, 210, 220], [10, 25, 200, 250], [15, 20, 210, 260])]
[15, 25, 210, 260]