找出列表中3个最高的值(包括负面的)



我搞不懂这个面试蛋糕的问题

给定一个array_of_int数组,找出你能从三个整数中得到的最大值

Input: [-100, 5, 50, -200, 10, 1, 60]
Output: [-100, -200, 60]

基本上,忽略负号并找到3个最大值并附加到新数组中,同时保留这些值的负号。以下是我目前的工作:

def highest_values(array):
    sort = sorted(array)
    new_array=[]
    while len(new_array)<3:
        for i in range(0,len(sort)):
            for j in sort[i:]:
                if abs(sort[i])>abs(j):
                    new_array.append(sort[i])
                    break
    print(new_array)
highest_values([-100, 5, 50, -200, 10, 1, 60])

但是,我没有得到预期的输出。

我可以得到一些提示,我目前的代码或我接近这个错误的方式?

提前感谢!编辑:我在解释这个问题时犯了一个严重的错误。现在我明白了,我需要从列表中的3个值中找到最大的产品)

最初,我想从列表中找到三个最大值,同时减去负号。

不要再担心回答这个问题了;严格来说,答案就在下面。明天我将重新正确地处理这个问题。谢谢你的帮助和提示。

你帮了很多忙,恩里科。很好的建议,谢谢你的帮助

问题涉及产品,但我在您的示例输出中没有看到任何产品。如果你只想得到三个最大值,忽略符号,你可以这样做:

sorted(array, key=abs, reverse=True)[:3]

基本上,key参数允许您指定一个函数,该函数必须在进行比较之前应用于列表的元素。这里我们用abs来忽略符号。reverse=True是施加后代顺序,那么你只能得到前三个元素。

您也可以使用heapq.nlargest函数:

from heapq import nlargest
nlargest(3, array, key=abs)

相关内容

最新更新