按特定顺序查找一组子列表中的最大值



我有以下列表:

L=[
[ [4.0, 4.0] , [1.0, 2.0, 3.0] ],
[ [4.0, 5.0] , [1.0          ] ]
]

我需要获取子列表的每个"列"的最大值。换句话说,我必须得到:

result=[5.0, 3.0]

。因为5.0是子列表第一"列"中的最大值:

[4.0, 4.0]
[4.0, 5.0]

3.0是子列表第二列中的最大值:

[1.0, 2.0, 3.0]
[1.0]

恐怕子列表的数量可能会发生变化,子列表的数量和子子列表中的值也会发生变化。我已经尝试了几个小时,但我只能迭代子列表的第一个值,因此我缺少位于其各自子列表末尾的最大值:-(提前谢谢你。

PS.:不幸的是我不能使用熊猫或Numpy...

您可以使用zip

L= [[[4.0, 4.0], [1.0, 2.0, 3.0]], [[4.0, 5.0], [1.0]]]
new_l = [max(c for b in i for c in b) for i in zip(*L)]

输出:

[5.0, 3.0]

您可以使用:

In [140]: import itertools as it
In [141]: [max(max(g) for g in e if g) for e in it.zip_longest(*L)]
Out[141]: [5.0, 3.0]

使用functools.partial的丑陋解决方案:

list(map(max, zip(*map(partial(map, max), L))))
# [5.0, 3.0]

在这里,map(partial(map, max), L)通过选择每个单元格的最大值来转换每一行;zip执行转置;另一个map(max, ...)查找每列的最大值。

不那么丑陋的解决方案:

c1 = c2 = 0
for col1, col2 in L:
c1 = max(c1, *col1)
c2 = max(c2, *col2)
# c1 = 5; c2 = 3

最新更新