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
索引了 res
,i
的最后一个可能值将是无效索引(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
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
索引了 res
,i
的最后一个可能值将是无效索引(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