我很难弄清楚这个面试蛋糕的问题
给定一个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个值中找到最大的乘积)
最初,我想在排除负号的同时从列表中找到三个最高值。
不用担心再回答这个问题。从技术上讲,仅在下面回答。明天我将正确解决该问题。感谢您的帮助和提示。
你帮了很多忙。很好的建议,谢谢您的帮助
该问题与产品有关,但您的示例输出中没有看到任何产品。如果只想获取三个最大值而忽略符号,则可以执行以下操作:
sorted(array, key=abs, reverse=True)[:3]
基本上,key
参数使您可以指定在进行比较之前必须应用于列表元素的函数。在这里,我们abs
用来忽略符号。该reverse=True
是强加给后代的命令,那么你可以得到前三个元素。
您还可以使用以下heapq.nlargest
功能:
from heapq import nlargest
nlargest(3, array, key=abs)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句