编写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))
答案 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] )