python列表刪除元素整理
阿新 • • 發佈:2018-06-07
循環 記錄 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列表刪除元素整理