我有以下列表:
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