Python 3解释器说索引超出范围,即使它不是

时间:2013-12-17 03:15:57

标签: python arrays list python-3.x indexoutofboundsexception

这是一个简单的代码,用于测试列表是否已镜像。我用列表变量'l'测试它,这是一个镜像列表。但是,编译器指出列表索引超出范围的错误。我已经发现问题在于变量'begin'的初始值。但我没有看到任何错误。

l = ['x', 'y', 'z', 'z', 'y', 'x']

mirror = 0
begin = 0
end = 5
while begin != end:
    if l[begin] == l[end]:
        begin += 1
        end -= 1
    else:
        mirror = -1
        begin = end
if mirror == 0:
    print('mirrored')
else:
    print('NO!')

2 个答案:

答案 0 :(得分:4)

问题原因:

begin end
 0     5
 1     4
 2     3
 3     2
 4     1
 5     0
因此,begin永远不等于end。当begin5时,

之后
if l[begin] == l[end]:       #if l[5] == l[0]
    begin += 1               #begin is now 6
    end -= 1

begin beomes 6,它超出范围。

现在解决方案:

l = ['x', 'y', 'z', 'z', 'y', 'x']

mirror = 0
begin = 0
end = 5
while begin != len(l):
    if l[begin] == l[end]:
        begin += 1
        end -= 1
    else:
        mirror = -1
        break            #we don't need to run the loop further
if mirror == 0:
    print('mirrored')
else:
    print('NO!')

答案 1 :(得分:2)

您的索引超出范围错误,因为您的“开始”索引不受限制地增加。当“begin”变为5时,它会尝试访问l [5],这超出了界限。添加附加约束:

while begin != end and begin < len(l):

将允许您的代码正常运行。也就是说,有很多内置的方法来完成你想要做的事情,但我相信你已经知道了:)