1. 程式人生 > >Python循環列表刪除元素問題

Python循環列表刪除元素問題

替代 循環 pan 不能 移動 列表 nbsp python 判斷

有人會遇到這種問題,遍歷列表,想刪除列表中的某幾個元素,執行後發現有些並沒有刪除到,

比如以下代碼

a=[1,2,3,4,5,6]
print(a)
for i in a: if i==3 or i==4: a.remove(i)
print(a)

從代碼看主要就是想刪除a列表中的 3 4 元素,

程序的結果是:

[1, 2, 3, 4, 5]

[1, 2, 4, 5]

結果不盡人意,原因是我們在遍歷的時候

  • seek走到了3元素的位置
  • if判斷remove 3 這個元素
  • 3這個位置刪除後位置空出來了,後面的元素就往前移動,替代了3的位置
  • seek繼續走到下一個,本來是4元素的,但是4元素往前移了,就錯過了,seek走到了5元素的位置

避免這個這個問題的就需要避免for循環,當然上面的例子可以有很多方法去刪除,但是當我們遇到一個不能避免for循環的情況,可以將要刪除的元素存儲到另外一個列表裏面,最後一並刪除.

a=[1,2,3,4,5]
d=[]
print(a)
for i in a:
    if i==3 or i==4:
        d.append(i)
for i in d:
    a.remove(i)
print(a)

#[1, 2, 3, 4, 5]
#[1, 2, 5]

Python循環列表刪除元素問題