我正在尝试交换列表中的2个元素。请看这段代码:
>>>a=[1,2,3,4]
>>>a[a.index(2)], a[a.index(2)-1] = a[a.index(2)-1], a[a.index(2)]
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
a[a.index(2)], a[a.index(2)-1] = a[a.index(2)-1], a[a.index(2)]
ValueError: 2 is not in list
我试图分别在索引0和1处交换1和2。即使列表中存在2,我也会收到值错误。任何人都可以解释为什么会这样?
答案 0 :(得分:3)
到多个赋值语句中的第一个赋值已经执行时,即:
a[a.index(2)] = a[a.index(2)-1]
列表中将不再存在 2,因此下一个分配目标中使用的a.index(2)
将失败。
请记住,目标的分配是从最左边开始完成的,因此第一个分配将替换值2.
您可以在执行分配之前简单地存储索引2来避免上述情况:
ind = a.index(2)
a[ind], a[ind-1] = a[ind-1], a[ind]
这样,您不仅可以存储索引,还可以避免使用list.index
遍历列表4次。