1. 程式人生 > >python列表刪除元素整理

python列表刪除元素整理

循環 記錄 move nbsp mov 刪除元素 bold 中一 刪除

先看一個例子:

test1 = [‘a‘,‘b‘,‘c‘,‘‘,‘‘]
for
i in test1: if i == ‘‘: test1.remove(i) #刪除空元素 print(test1)

>>>[‘a‘, ‘b‘, ‘c‘, ‘‘]

這時發現並沒有達到我們想要的結果,原因分析如下:

要了解一下python列表的數據結構,列表屬於連續線性表,它的連續在於有一塊連續的內存儲存著列表中元素的地址,如圖(忽略地址與值所占的字節,只為方便舉例子):技術分享圖片

技術分享圖片

當然也可以通過一個代碼來看證明一下:

a=[1,2,3]
for i in a:
    print
(id(i))
>>>1514106336 #此地址即為左邊的連續地址

1514106368
   1514106400

技術分享圖片

回到問題,當我們刪除test1中的空字符時,
列表有三種刪除元素方式,del,remove,pop,其中del是python的一個方法不是列表所特有,pop()參數為元素的索引,remove()參數是想要刪除的值

用一下del看看會出現什麽結果:
a=[1,2,3]
for i in a:
    if i==2:
        del i
        print(id(i))
#報錯 NameError: name ‘i‘ is not defined

a=[1,2,3]
for i in a:
    if i==2:
        del i #del是解除引用,python中一切皆引用
    try:
         print(id(i))
    except NameError:
        pass
a刪除前地址1927704032    刪除後輸出1927704032
      1927704064            1927704096
       1927704096
 

對比地址的變化,可以得知del刪除了該元素內存地址引用。

刪除列表中的空元素有這兩種方法:

#第一種
test2 = [a,‘‘,b
,‘‘,c,‘‘,‘‘] while ‘‘ in test2: test2.remove(‘‘) print(test2) >>>[a, b, c] #第二種 test2_new = [i for i in test2 if i != ‘‘] #生成一個新的列表

即刪除列表中指定元素建議使用上述兩種方法,不要用for循環。

上面記錄是寫代碼時踩的坑,有不嚴謹或者錯誤的地方期望大家指正。

python列表刪除元素整理