python迴圈刪除列表元素常見錯誤與正確方法

2022-02-08 04:43:34 字數 2199 閱讀 6199

常見錯誤一:使用固定長度迴圈刪除列表元素

l = ['

a','

b','c'

]for i in

range(len(l)):

l.pop(i)

報錯:valueerror: list.remove(x): x not in list

原因:

在刪除list中的元素後,list的實際長度變小了,但是迴圈次數沒有減少,依然按照原來list的長度進行遍歷,所以會造成索引溢位。是的,i的值是一開始就生成好了(0,1,2),後面不會因為列表大小變化了再變化。

圖示:

執行第一次pop前,i是0

執行第一次pop後,刪除了索引0原來的a

執行第二次pop前,i是1

執行第二次pop後,刪除了索引1原來的c

執行第三次pop前,i是2。繼續執行pop,索引2已超出了列表範圍(此時列表只有索引0了)。

解決方法:倒序迴圈遍歷

l = ['

a','

b','c'

]for i in range(len(l)-1, -1, -1):

l.pop(i)

常見錯誤二:正序迴圈遍歷刪除列表元素

l = ['

a','

b','c'

]for i in

l: l.remove(i)

print l

結果:['b']

原因:

按順序迴圈刪除,怎麼會有乙個沒刪除呢?原因同上,i的值是一開始就生成好了(0,1,2),後面不會因為列表大小變化了再變化。但是列表因為值的刪除,是在變化的。

圖示:

執行第一次remove前,i是索引0的a

執行第一次remove後,i是索引0的a被刪除

執行第二次remove前,i是索引1的c

執行第二次remove後,i是索引1的c被刪除。之後繼續執行i是索引2,此時列表已經沒有索引2了,迴圈退出。最後b就被剩下了。

解決方法一:倒序迴圈遍歷:

l = ['

a','

b','c'

]for i in l[::-1]:

l.remove(i)

print l

解決方法二:深拷貝乙個ll,對l遍歷,對ll操作

l = ['

a','

b','c'

]ll =l[:]

for i in

l: ll.remove(i)

此方法的缺點是對於過大的list,拷貝後可能很佔記憶體。那麼對於這種情況,可以用倒序遍歷的方法來實現。

python迴圈刪除列表元素常見錯誤與正確方法

使用固定長度迴圈pop方法刪除列表元素 num list 1 1,2,2,2,3 for i in range len num list 1 if num list 1 i 2 num list 1.pop i else print num list 1 i print num list 1 num...

python迴圈刪除列表元素

如果我們用最常用的方法使用for迴圈正向遍歷列表元素進行刪除,結果如下 一 索引遍歷列表迴圈刪除 執行結果報錯 因為for語句中range 方法按照列表a的長度生成了有序整數序列,但在遍歷過程中刪除了列表元素,實際列表長度已發生改變,而遍歷的序列仍是按原始列表的長度遍歷的,導致索引超出範圍 二 直接...

python列表迴圈中刪除元素

遍歷n個元素的列表,每次迴圈時刪除當前元素,那麼要多少次結束迴圈呢。arr 0,1,2,3,4 for x in arr print 本次刪除的元素 x arr.remove x print 當前列表內容 arr print in loop print out loop print arr 結果如下...