python中for循環刪除不全的問題

之前遇到過一次,刪除列表中符合條件的元素,for循環挨個判斷是否符合條件,符合就刪除,刪完結果發現有一個符合條件的沒有刪掉。app

那麼若是想刪除某些列表中的元素,好比有一個a列表,a=[11,22,33,44,55,66,77]spa

刪除a中的22和33,應該如何作呢?內存

若是你這樣寫:ci

         for i in a:rem

         if i == 22 or i==33:for循環

                   a.remove(i)table

若是按照這樣寫,22被如期刪掉了,但33卻沒有,刪完的結果是:[11,33,44,55,66,77]不信你試試循環

爲何呢~~?請看如下分解圖,第一次循環,i指向11,不刪除:top

11tab

22

33

44

55

66

77

                                                                                                ↑

第二次循環,i指向22,符合刪除條件了,遂刪除,

11

22

33

44

55

66

77

                                                                                                         ↑

刪除後,內存會變爲:

11

33

44

55

66

77

                                                                                                             ↑

注意嘍,看到了嘛?如今33跑到本來22的位置上了,i仍舊指向的是第二個位置,那麼第三次循環,i就會繼續向下指向44了,就把33跳過去了,依次類推直到完成循環。

 

因此知道爲何上面那段代碼會有問題了吧。那麼怎麼解決呢?只須要找一個臨時列表b將要刪除的東西存起來,而後再去原列表依次刪

代碼改爲:

b=[]

for i in a:

         if i == 33 or i==44:

                   b.append(i)

for i in b:

         if i in a:

                   a.remove(i)

相關文章
相關標籤/搜索