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

时间:2015-07-24 08:42:29

标签: python arrays list

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

给定一个array_of_ints,找到你可以从三个整数中得到的最高值。

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个值中找到最好的产品)

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

您还可以使用heapq.nlargest功能:

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