2015-11-02 56 views
-2
def second_highest(list): 
""" (list of int) -> int 

如何在不使用remove,pop或sort(我尝试过)的情况下从整数列表中找到第二高的值,因为我需要稍后使用相同的列表? 不会有重复的数字。Python:如何找到列表中第二高的数字?

我试图删除使用max,排序列表的最高数字,但由于这些变异列表,我不能使用它们。

ex。

​​

预先感谢您!

+0

你应该真的显示一些代码没有人会在这里为你做,但你知道如何找到最大的元素?如果你这样做,你可以用同样的方法做这个问题,但为第二大元素添加另一个变量。 – JackVanier

+0

你似乎忘了在你的问题中包含一个问题。 – Biffen

+0

这听起来像作业。你有什么尝试?向我们展示一些代码。首先在概念上讲解事情:要知道第二高的数字,你首先要知道什么?可能是最高的数字。你怎么找到的? – Tgsmith61591

回答

4

使用内置sorted OY mylist,这将不会修改mylist(感谢@Tofystedeth)

mylist = [1, 2, 8, 3, 12] 
print(sorted(mylist, reverse=True)[1]) 
+0

他没有提到他不想使用任何排序? – mic4ael

+1

排序已经返回一个新列表。在mylist本身而不是mylist [:]上使用它应该是安全的。 mylist.sort()将是实际修改mylist的那个。 – Tofystedeth

2
data = [1,2,8,3,12] 

largest = None 
second_largest = None 

for a in data: 
    if not largest or a > largest: 
     if largest: 
      second_largest = largest 
     largest = a 

print("largest: {}".format(largest)) 
print("second_largest: {}".format(second_largest)) 
0

你应该在列表中找到最大和保存它的索引。然后使用remove()函数将其从列表中删除,然后查找新列表的最大值(删除原始最大值),这将是您的第二高元素。然后,您可以使用insert()方法将原始最大值添加回列表中。

0
arr = [2, 3, 4, 2, 4, -3, 43, -4, -25, 45, 9] 
my_list = list(set(arr)) 
my_list.sort() 
if len(my_list) == 1: 
    print(my_list[0]) 
elif len(my_list) >= 2: 
    print(my_list[-2]) 
相关问题