【发布时间】:2019-08-06 20:01:39
【问题描述】:
编写一个 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))
【问题讨论】:
-
您具体需要哪些帮助?
-
我不知道你在什么样的约束下工作,但你可以在没有循环的情况下完成这个,通过对列表进行排序而不是拉出列表中的最后两项。
-
@JasonKLai 如果他排序,那么他能做的最快的是 nlog(n) ,所以我假设排序不在等式。 (除非使用带有 O(n) 的桶/基数排序)然后 list[-2:] 得到最后两个数字
-
要知道一件重要的事情:如果最大数字出现两次,那么第二大数字是否被认为与最大数字相同,或者它是下一个最小数字?
heapq.nlargest是处理第一种情况的 Python 内置方法,但解决第二种情况的解决方案必须自定义编写。 -
有什么问题?我会使用 heapq.nlargest,尽管我不认为教练会喜欢这样。您是否需要知道如何从您的函数中一次分配/返回多个值?只需“返回 firstmax,secondmax”(不要使用内置名称作为变量名)
标签: python python-3.x max