【发布时间】:2017-05-16 10:15:57
【问题描述】:
在找出要从控制台读取的列表中的第二大数字时,我一直被这个问题困扰:
n = 列表的大小(元素数) AND arr = 列表本身
其中一个约束是 -100
但是通过 3 10 0 10
n = int(input())
arr = map(int, input().split())
sortedlist = sorted(arr)
temp = len(sortedlist)
emptylist = []
i = 0
for temp in range(2, 11):
if sortedlist[i]<sortedlist[i+1]:
i+=1
emptylist.insert(i, sortedlist[i-1])
b = max(emptylist)
print(emptylist)
错误:
Traceback(最近一次调用最后一次):
文件“solution.py”,第 12 行,在 如果排序列表[i]
IndexError: 列表索引超出范围
【问题讨论】:
-
所以你对列表进行排序然后检查
if sortedlist[i] < sortedlist[i+1],你为什么不相信 Python 内置函数来完成他们的工作?for temp in range(2, 11):应该完成什么? -
因为
i每次都在递增,而您没有检查它是否超过了列表长度限制 -
@polku 因为它可能是
== -
至于第二种情况,因为第二个元素大于第三个,
i不会再次递增。所以i总是保持 1 -
知道了!正如问题所要求的那样,我不必要地将 temp 限制在 2 到 11 之间,但这不是必需的。 For i in range(0, temp-1) 完成了这项工作。