编写python代码,仅使用一个循环即可从列表中找出最大和第二个最大数字

时间:2019-08-06 20:01:39

标签: python python-3.x max

编写python代码,仅使用一个循环即可从列表中找出最大和第二个最大数字

Python程序找到第二大  列表中的数字

数字列表-列表长度至少应为2

list1 = [10, 20, 4, 45, 99] 

max=max(list1[0],list1[1]) 
secondmax=min(list1[0],list1[1]) 

for i in range(2,len(list1)): 
   if list1[i]>max: 
      secondmax=max
      max=list1[i] 
   else: 
      if list1[i]>secondmax: 
         secondmax=list1[i] 

print("Second highest number is : ",str(secondmax)) 

4 个答案:

答案 0 :(得分:0)

您也可以在没有for循环的情况下执行此操作,方法是两次调用列表中的max()-并删除第一次调用的结果:

list1 = [10, 20, 4, 45, 99]
list1.remove(max(list1))
print(max(list1))

但是,这将比您在方法中仅使用for循环要慢,只是因为它必须遍历列表两次。

答案 1 :(得分:0)

如果我理解您的回答,则可以尝试以下代码(也为负数):

list1 = [99, 20, 4, 10, 45] 

if len(list1) < 2:
    raise Exception ("List size must be >= 2")

first_max=list1[0]
second_max=list1[-1]

#I used the position to avoid the same number(index) for the first and second max
position_first_max=0
position_second_max=len(list1)-1

for idx,item in enumerate(list1):
    if item>first_max:
        second_max=first_max
        position_second_max=position_first_max
        first_max=item
        position_first_max=idx
    else:
        if item>second_max and position_first_max!=idx:
            second_max=item
            position_second_max=idx

print("First highest number is : ",str(first_max))
print("Second highest number is : ",str(second_max))

我用不同的数字在不同的位置和工作方式进行了测试。

希望这会有所帮助。

答案 2 :(得分:0)

一个没有排序或额外数据结构的循环:

def find_two_max(lst : list):
    if len(lst) < 2:
        raise Exception ("List size must be >= 2")

    max1=max2=float('-inf')

    for number in lst:
        if number >= max1:
            max2=max1
            max1=number
        elif number > max2:
            max2=number
    return max1, max2

l=[99, 299, 0, 2,3,4,5,1000]
print("The highest two numbers are %s , %s " % find_two_max(l))```

答案 3 :(得分:-1)

一个简单的解决方案是使用内置的Python函数来sort()。对列表进行排序后,可以使用索引拉出倒数第二个项目:

list1 = [10, 20, 4, 45, 99]

list1.sort()
print( 'Highest number is : ', list1[-1] )
print( 'Second highest number is : ', list1[-2] )