我有一个列表列表:
[[[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]]
如果第三个实数小于阈值(比如50),我想获得列表中每个元素的最大值。换句话说,在上述情况下,所需的结果将是:
1)根据阈值过滤结果,例如
[[[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]]
2)获取列表中每个元素的最大值:
[20, 25, 200, 230]
[110, 150, 240, 300]
答案 0 :(得分:1)
>>> 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]
我使用star运算符使代码更灵活:它不依赖于列表数:
>>> 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]
答案 1 :(得分:0)
尝试一下:
a = [[[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]]
filtered = [i for i in a if i[2] < 50.0]
[get_maximum( i ) for i in filtered]
一旦您解释了“ 2)获得列表中每个元素的最大值:”的意思或将自己实现,这将起作用。