【问题标题】:Python - List index out of rangePython - 列表索引超出范围
【发布时间】: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] &lt; 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) 完成了这项工作。

标签: python list


【解决方案1】:

如果排序列表[i]

问题就在这里。在您的示例中,n = 3 所以我只能是 0、1 或 2。但在您的代码中,i+1 在上面的行中是 1、2 和 3,这超出了数组范围。

您可以打印i 并看到i 一直到2,即n-1,因此i+1 将超出范围。这是您可以调试的一种简单方法。

您必须确保不与最后一个元素与下一个元素进行比较的条件。

【讨论】:

  • 谢谢。知道了。问题在于我在 for 循环中对 i 的约束。 For i in range(0, temp-1) 完成了这项工作。
  • 太棒了!但是只是出于好奇,你为什么不使用sortedList[-2] 来获得第二大元素呢?会让你的工作更轻松!
  • 我想我太着迷于试图找到它背后的逻辑了。
【解决方案2】:

您可以使用sortedlist[-2] 获得第二大的数字。

如果数字重复,您必须使用set 方法调用原始/排序列表。

sortedlist = sorted(list(set(arr)))

【讨论】:

    【解决方案3】:

    试试下面的 sn-p number_of_inputs = 4 # this is user defined i = 0 collections = list() while True: user_input = input("Enter your numbers \n") if 100 >= user_input >= -100: i += 1 collections.append(user_input) if i == number_of_inputs: print "second largest number is \t ",sorted(collections)[-2] break else: print"this Entry not allowed !!!"

    【讨论】:

      猜你喜欢
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多