这是一个简单的代码,用于测试列表是否已镜像。我用列表变量'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!')
答案 0 :(得分:4)
问题原因:
begin end 0 5 1 4 2 3 3 2 4 1 5 0因此,
begin
永远不等于end
。当begin
为5
时,之后
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):
将允许您的代码正常运行。也就是说,有很多内置的方法来完成你想要做的事情,但我相信你已经知道了:)