2017-01-09 76 views
1

我想交換列表中的2個元素。請看下面這段代碼:即使元素存在於Python中的列表中也存在值錯誤

>>>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 

我試圖交換1和2分別存在於索引0和1。即使列表中存在2,我也會遇到值錯誤。任何人都可以請解釋爲什麼是這樣嗎?

回答

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倍。

+0

@PeterWood沒有。左到右。 –

相關問題