找到列表中的3个最高值(包括负数)

A K*_*A K 0 python arrays list

我在弄清楚这个面试蛋糕问题时遇到了麻烦

给定array_of_ints,找到可以从三个整数中获得的highest_values.

Input: [-100, 5, 50, -200, 10, 1, 60]
Output: [-100, -200, 60]
Run Code Online (Sandbox Code Playgroud)

基本上,忽略负号并找到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])
Run Code Online (Sandbox Code Playgroud)

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

我可以获得有关当前代码的一些提示,还是我接近错误的方法?

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

最初,我想从列表中找到三个最高值,同时否定负号.

不要担心再回答这个问题; 从技术上讲,它的答案就在下面.明天我会正确地重新解决这个问题.感谢您的帮助和提示.

你帮了很多东西.很好的建议,谢谢你的帮助

enr*_*cis 7

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

sorted(array, key=abs, reverse=True)[:3]
Run Code Online (Sandbox Code Playgroud)

基本上,key参数允许您指定在进行比较之前必须应用于列表元素的函数.我们在这里abs忽略了这个标志.该reverse=True是强加给后代的命令,那么你可以得到前三个元素.

你也可以使用这个heapq.nlargest功能:

from heapq import nlargest
nlargest(3, array, key=abs)
Run Code Online (Sandbox Code Playgroud)

  • 是啊,`[:3]`,Python的"机器人小猫"操作员. (2认同)