描述:問題**:輸入乙個整數列表,並輸入乙個整數x,刪除列表中所有值為x的數,再輸出列表。
a =
list
(eval
(input()
))x =eval
(input()
)for i in a:
if i==x:
a.remove
(i)print
(a)
輸入:3,4,1,1,1,7,9,1 1
輸出:[3, 4, 7, 9,1]
可以發現,列表中的1並未完全去除。
原因:用for發起任何形式的遍歷時,它的遍歷順序是一開始就確定的,而在遍歷中刪除了元素導致了當前索引的變化。整個列表的元素向前移動,但i卻在最初就確定了,所以導致漏刪元素。
解決方法:
1.最簡單的方法
a =
list
(eval
(input()
))x =eval
(input()
)for i in a[:]
:if i==x:
a.remove
(i)print
(a)
2.使用filter()
函式過濾掉符合指定條件的元素。
a =
list
(eval
(input()
))x =eval
(input()
)print
(list
(filter
(lambda y: y != x, a)
))
3.使用列表解析式。
a =
list
(eval
(input()
))x =eval
(input()
)b =
[i for i in a if i != x]
print
(b)
4.利用深拷貝
import copy
a =list
(eval
(input()
))x =eval
(input()
)b = copy.
deepcopy
(a)for i in a:
if i == x:
b.remove
(i)print
(b)
5.使用while迴圈
a =
list
(eval
(input()
))x =eval
(input()
)while x in a:
a.remove
(x)print
(a)
6.倒序刪除
a =
list
(eval
(input()
))x =eval
(input()
)for i in
range
(len
(a)-1,
-1,-
1):if a[i]
== x:
a.remove
(x)print
(a)
因為列表總是「向前移」,所以可以倒序遍歷,即使後面的元素被修改了,還沒有被遍歷的元素和其座標仍保持不變,不過會可能導致遍歷長度大於列表的長度。 Python遍歷列表時刪除元素
本文首發於我的個人部落格suixin s blogpython的for迴圈可以遍歷乙個列表,但若需要同時將符合條件的元素刪除時,則會出錯。s 1 2,3 4,1 1 s1 s for i in s1 if i 1 s1.remove i print s1 輸出 2,3,4,1 另一種 s2 s fo...
Python語法糖 遍歷列表時刪除元素
python的for可以遍歷乙個list,但是在遍歷的過程中刪除元素常常會得到意想不到的結果甚至程式出現異常,例如 lst 1,1,0,2,0,0,8,3,0,2,5,0,2,6 for item in lst if item 0 lst.remove item print lst 輸出 1,1,2...
Python遍歷列表刪除多個列表元素
在遍歷list的時候,刪除符合條件的資料,結果不符合預期 num list 1,2,2,2,3 print num list for item in num list if item 2 num list.remove item else print item print num list 結果是 ...