I got error saying IndexError: list index out of range. how do I fix this?

I got error saying IndexError: list index out of range. how do I fix this?

   res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]      

   while not i>(len(res)-1):
        if res[i]==res[i+1]:
            answer+=2
            i+=2
        else:
            i+=1

变量“answer”应该计算并排放置的重复数字。出于某种原因,我收到错误消息 IndexError: list index out of range。我该如何解决这个问题?

让我们先稍微简化一下代码。条件

not i > (len(res) - 1)

可以转换为

i <= (len(res) - 1)

可以进一步转换为

i < len(res)

这意味着 i 将始终小于 res 的长度,这使其成为有效索引。但是,在 while 的正文中,这一行:

if res[i]==res[i+1]:
    ...

我们用 i + 1 索引了 resi 的最后一个可能值将是无效索引(i + 1 将等于 len(res)).我们必须确保不仅 i 小于 len(res),而且 i + 1 小于 len(res),给我们这个固定版本的代码:

while i + 1 < len(res):
    if res[i] == res[i + 1]:
        answer += 2
        i += 2
    else:
        i += 1

运行 您示例中的这段代码 res 给出的 answer 为 4,这看起来是正确的。

给它这种方法怎么样?

res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]
answer = 0
start = 0
while start < len(res):
    if start + 1 < len(res):
        if res[start] == res[start + 1]:
            answer += 1
            start += 2
        else:
            start += 1
    else:
        start += 1
print(answer)

如果您还想计算重叠对,可以使用这种方法:

res = [3, 1, 1, 5, 2, 4, 2, 4, 2, 4, 3, 1, 1, 5, 3]
for i, j in zip(res, res[1:]):
    if i == j:
        amount += 2

另一种方法可能是:

for i, _ in enumerate(res):
    if i < len(res) - 1 and res[i] == res[i+1]:
        amount += 2