1. 程式人生 > >Python中For each 與Remove使用中誤區

Python中For each 與Remove使用中誤區

有一段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 。