在特定ord的一组子发布者中查找最大值

2024-10-01 09:36:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单:

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]

子列表的数量可能会改变,子发布者的数量和子发布者内部的值也可能会改变。我已经尝试了几个小时,但是我只能迭代subpublists的第一个值,因此我丢失了位于其各自subpublists末尾的最大值:-(提前谢谢。你知道吗

PS.:不幸的是,我不能使用熊猫或小动物。。。


Tags: 列表数量resultps发布者小时动物末尾
3条回答

您可以使用:

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]

您可以使用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]

使用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

相关问题 更多 >