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个值中找到最好的产品)
最初,我想从列表中找到三个最高值,同时否定负号.
不要担心再回答这个问题; 从技术上讲,它的答案就在下面.明天我会正确地重新解决这个问题.感谢您的帮助和提示.
你帮了很多东西.很好的建议,谢谢你的帮助
问题涉及产品,但我没有在您的示例输出中看到任何产品.如果您只想获得忽略标志的三个最高值,您可以这样做:
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)