即使Python中的列表中存在元素,也会出现值错误

时间:2017-01-09 14:19:11

标签: python

我正在尝试交换列表中的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,我也会收到值错误。任何人都可以解释为什么会这样?

1 个答案:

答案 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次。