我搞不懂这个面试蛋糕的问题
给定一个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)