【Python】刪除陣列多個元素所產生的問題
阿新 • • 發佈:2019-02-05
如下的一段小程式,
#-*-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這個元素!