如何使用 python 更紧凑地选择最高数字?

How can I make selecting highest number more compact with python?

我有这段代码,其中有一个大小为 (i,j) 的数组,对于每个 j 变量,我想要 select I 个变量中的最大值。

例如,我有数组[[2,5,1][12,4,6],[1,7,8],[2,4,5]],我想得到最高的每个内部数组的编号,因此它应该 return: [5,12,8,5]

我有以下代码可以正常工作,但是,它有点混乱且难以阅读,所以我的问题是我可以将它变得更紧凑吗?

这是我的代码:

high_net_profit = list()
for i in range(len(self.accum_profit[0])):
    high_value = 0
    for j in range((len(self.accum_profit))):
        if j == 0:
            high_value = self.accum_profit[j][i]
        else:
            if self.accum_profit[j][i] > high_value: high_value = self.accum_profit[j][i]
    high_net_profit.append(high_value)

尝试:

lst = [[2, 5, 1], [12, 4, 6], [1, 7, 8], [2, 4, 5]]

out = [max(l) for l in lst]
print(out)

打印:

[5, 12, 8, 5]

或者:

out = [*map(max, lst)]
print(out)

这是一个使用 numpy 的简单解决方案。 Numpy 是处理数字时非常有用的库:

import numpy as np

l_in = [[2, 5, 1], [12, 4, 6], [1, 7, 8], [2, 4, 5]]

# out = [max(l) for l in l_in]  # can also be used
out = list(np.max(l_in, axis=1))

print(out)

输出:

[5, 12, 8, 5]
s =  [[2,5,1][12,4,6],[1,7,8],[2,4,5]]

如果你只需要可迭代对象:

x = map(max, s)

如果你需要一个列表,那么包装成list:

x = list(map(max, s))