我正在研究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
答案 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