当列表中肯定有特定索引处的项目时,为什么会出现列表索引错误?

时间:2018-11-28 22:13:32

标签: python python-2.x

我正在研究Python 2中的一些Code Signal练习问题,并且遇到了很多相同的错误。就像问题标题所说的那样,即使我确定它存在,我也无法访问特定的列表元素。当我尝试运行下面显示的代码时,出现此错误,IndexError:列表索引超出范围。下面显示的是我正在使用的一些代码。感谢您的任何帮助,我敢肯定这是对Python2的工作方式的简单误解。在这个例子中 s =“ adobecodebanc”,而t与我的问题无关

    def minSubstringWithAllChars(s, t):
        nuS = str(s)
        listS = list(nuS)

        for i in range(len(listS)):
            print i
            print listS[i]

        print listS[0]

当我省略最后一行代码时,我可以打印出S中的所有字符-如下所示。但是,当我添加最后一行时,由于出现索引错误,所以无法打印任何内容。

    0
    a
    1
    d
    2
    o
    3
    b
    4
    e
    5
    c
    6
    o
    7
    d
    8
    e
    9
    b
    10
    a
    11
    n
    12
    c

这可能是由于什么?这是我的错误消息的文字

          Traceback (most recent call last):
            file.py on line ?, in getUserOutputs
              userOutput = _runjodsn(testInputs[i])
            file.py on line ?, in _runjodsn
              return minSubstringWithAllChars(*_fArgs_nycavblqytqu)
            file.py on line 9, in minSubstringWithAllChars
              print listS[0]
          IndexError: list index out of range

1 个答案:

答案 0 :(得分:0)

您的提供者python编译器可能会遇到一个奇怪的问题,或者可能是因为该页面包含用于测试,运行和验证python练习的Web应用程序,所以您的代码的运行方式与您在Web上看到的方式不完全相同页面。

如果将代码与stacktrace进行比较,则可以很容易地发现这一点,因为它具有其他调用,甚至函数的参数似乎也不是标准的形式参数,而是* args(非关键字可变长度参数)论点。

代码的IndexError的堆栈跟踪(例如,如果您的字符串参数为空,则为):

Traceback (most recent call last):
  File "main.py", line 11, in <module> 
    minSubstringWithAllChars("abe", "") 
  File "main.py", line 9, in minSubstringWithAllChars 
    print listS[0] 
IndexError: list index out of range

无论如何,使用python 2.7.13运行显然不会显示您的代码有问题:

def minSubstringWithAllChars(s):
    nuS = str(s)
    listS = list(nuS)
    print("working with string: " + nuS)
    print("Len of s: " + str(len(nuS)))
    print("Len of listS: " + str(len(listS)))
    print("\n")

    for i in range(len(listS)):
        print("Checking position: " + str(i) + " of String (" + nuS + "): " + listS[i])

    print("\nAdditional access to listS via index 0: ")
    print listS[0]

print("Start\n")
minSubstringWithAllChars("adobecodebanc")
print("\nEnd")

您可以看到它的工作原理:

Start

working with string: adobecodebanc
Len of s: 13
Len of listS: 13


Checking position: 0 of String (adobecodebanc): a
Checking position: 1 of String (adobecodebanc): d
Checking position: 2 of String (adobecodebanc): o
Checking position: 3 of String (adobecodebanc): b
Checking position: 4 of String (adobecodebanc): e
Checking position: 5 of String (adobecodebanc): c
Checking position: 6 of String (adobecodebanc): o
Checking position: 7 of String (adobecodebanc): d
Checking position: 8 of String (adobecodebanc): e
Checking position: 9 of String (adobecodebanc): b
Checking position: 10 of String (adobecodebanc): a
Checking position: 11 of String (adobecodebanc): n
Checking position: 12 of String (adobecodebanc): c

Additional access to listS via index 0: 
a

End

另一件事是,您不需要使用索引来迭代字符串字符(或使用list()将字符串分解为字符数组)。您可以使用以下快捷方式:

for i in nuS:
    print i