1. 程式人生 > >【Python】刪除陣列多個元素所產生的問題

【Python】刪除陣列多個元素所產生的問題

如下的一段小程式,

#-*-coding:utf-8-*-
arr=[1,2,3];
for a in arr:
    if a<3:
        arr.remove(a);
print arr;

我本來想用陣列中自動封裝好的remove()方法,刪除陣列arr中少於3的元素。

這個方法刪除陣列中單個元素是沒有任何問題,但是如果想刪除arr中,少於3的元素問題就來的。

arr中有三個元素,1,2,3,少於3的元素有2個,刪除之後很顯然只是剩下[3],我開始也是這樣認為,但是執行結果卻是[2,3],如下圖所示:


原因是這樣的:


remove()在刪除陣列單個元素的時候,刪完元素很明顯需要把指標位置向前移1位,這就發生如上圖所示的指標偏移。

因此需要刪除陣列中多個元素的時候,絕對不能向上面那樣寫。

為此,可以用如下的方式結局,進行陣列中多個元素刪除的時候,先把這個陣列複製一個,刪的時候,遍歷臨時陣列,刪元陣列的元素,刪完再刪除臨時陣列,這就不會發生因刪除而導致的指標偏移了。具體程式碼如下:

#-*-coding:utf-8-*-
arr=[1,2,3];
arr_temp=arr[:]#直接建立一個新的陣列arr_temp並將arr的元素倒進來,arr_temp=arr的話,arr_temp僅僅是一個指向arr陣列的指標而已。
for a in arr_temp:
    if a<3:
        arr.remove(a);
del arr_temp;
print arr;

執行結果自然也符合我們所想象的一樣,最後在arr裡面剩餘3這個元素!