我在弄清楚这个面试蛋糕问题时遇到了麻烦
给定一个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个值中找到最好的产品)
最初,我想从列表中找到三个最高值,同时否定负号。
不要再担心回答这个问题了;从技术上讲,它在下面回答。我明天会正确地重新解决这个问题。感谢您的帮助和提示。
你帮了很多东西。很好的建议,谢谢你的帮助
答案 0 :(得分:7)
问题涉及产品,但我没有在您的示例输出中看到任何产品。 如果你只想得到三个最高值,忽略你可以做的标志:
sorted(array, key=abs, reverse=True)[:3]
基本上key
参数允许您指定在进行比较之前必须应用于列表元素的函数。在这里,我们使用abs
来忽略该符号。 reverse=True
是强加后代顺序,然后你可以得到前三个元素。
您还可以使用heapq.nlargest
功能:
from heapq import nlargest
nlargest(3, array, key=abs)