【发布时间】:2021-08-04 22:19:58
【问题描述】:
我正在研究 python 中的数据结构,并且遇到了数组操作。目前我正在考虑插入。
为了练习,我必须做的问题是“如果数组中的元素为零,则将右边的元素也设为零”。看起来很简单,我以为我明白了,但是我抛出了一个 IndexError,我对为什么感到困惑。这里是:
def duplicateZeroes(arr):
for i in range(len(arr)):
if arr[i] == 0:
arr[i + 1] = 0
return arr
print(duplicateZeroes([1, 2, 3, 0, 4]))
>>> arr[i + 1] = 0
IndexError: list assignment index out of range
根据我的想法,arr[i + 1] 在这种情况下是4,我的意思是让它等于零。但我收到错误"IndexError: list assignment index out of range"。对我来说这没有意义,因为arr[i + 1] 仍在范围内,所以这里发生了什么?我已经把它分解并做了一些测试代码,看看它是否不同,否则没关系:
a = [1, 2, 3]
for i in range(len(a)):
if a[i] == 2:
a[i+1] = "changed"
print(a)
>>> [1, 2, 'changed']
有人可以解释一下区别吗?
【问题讨论】:
-
当 a[i] == (数组中的最后一个元素) 并且没有找到 a[i+1] 时抛出异常。尝试使用 range(len(a) - 1)
-
是的,行得通!现在拍我的额头。我只是明白为什么当你打字的时候。谢谢@Namandeep_Kaur
-
具体来说,在循环中将
4更改为0,然后在下一次传递中使用that0并尝试找到右侧的元素它 -
它恰好在第二个示例中有效,因为
if仅在最后一个索引 - 1 处触发,因此 i+1 有效。但是如果你厌倦了a = [1, 3, 2]它也会失败 -
注意,你的方法的问题是,如果你有类似
[1,0,2,3,1,0]的东西,当你修复一个错误时,它会导致[1, 0,0,0,0,0]....
标签: python indexing index-error