无法修复“列表索引超出范围”

时间:2019-01-17 01:33:46

标签: python python-3.x

我正在尝试在python中编写一个简单的代码以查找第一个缺少的正整数。我的算法是创建一个由零组成的数组,其输入数组中的最大正整数的大小为+1(例如,如果最大数为7,则0的数组的大小为8)。然后,我跟踪输入数组,每当找到一个正数时,便将第二个数组中的索引值+1更改为1。这是我的代码:

def minPositive(a):
   max_a = max(a)
   b = [0]*(max_a+1) # This is the second array initialized to zero
   for i in range(len(a)):
      if a[i] > 0:
          b[a[i]+1]= 1
   for j in range(len(b)):
      if j != 0:
          if b[j] == 0:
             return j

但是,当我编写此代码时,我会遇到“列表索引超出范围”。我多次跟踪程序,但找不到错误。

1 个答案:

答案 0 :(得分:0)

Python从0开始索引,因此长度为n的列表没有第n个元素。同样,具有n+1个元素的列表也没有第n+1个元素。

对于a中的每个正值(而不是值加1),一个选项是将与b中的该值相对应的索引设置为1。您可以这样重写您的函数(简化一下):

def minPositive(a):
    b = [1 if n in a and n > 0 else 0 for n in range(max(a) + 1)]
    return b

或者您可以将列表b延长一个元素。