Python中For each 與Remove使用中誤區
阿新 • • 發佈:2019-02-13
有一段Python程式碼如下:
alist=['a','b','c','d']
print 'alist=' ,alist
for each in alist:
print each
alist.remove(each)
其輸出為什麼?肯定不少人會說結果為空,因為alist陣列中的元素在for each 結合remove這段都被移出了。
但真正執行的結果為:
挺出乎意料的哈。
什麼原因,我們在for each 里加上 print 'alist = ' ,alist 來看一下。
for each in alist:
print each
alist.remove(each)
print 'alist = ' ,alist
輸出結果:
為什麼會這樣?
在for each 裡, each 代表數組裡的位數,第一次執行為陣列[0]位,a , 所以後面的remove 就是把a 移出了,移出後, alist陣列變成['b','c','d'] , 這個在第一步執行完後沒有什麼異議。
關鍵在於第二次執行,第二次執行為alist陣列的[1]位,在alist變成[‘b','c','d']的情況下,alist[1]為 c , 所以此時each 為c, 再執行remove 就把alist陣列中 c元素移出了,alist陣列變為['b','d'],此時陣列只有兩個了,alist[0]-'b', alist[1]-'d', 而此時each 值已變為2了,因為alist[2]已不純在,所以程式執行結束。
由此,我們需要銘記,如果想要實現將數組裡的元素全部移出,那麼一定要慎用for each 。