最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

python的列表遍歷刪除實(shí)現(xiàn)代碼

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 14:34:48
文檔

python的列表遍歷刪除實(shí)現(xiàn)代碼

python的列表遍歷刪除實(shí)現(xiàn)代碼:python的列表list可以用for循環(huán)進(jìn)行遍歷,實(shí)際開發(fā)中發(fā)現(xiàn)一個(gè)問題,就是遍歷的時(shí)候刪除會(huì)出錯(cuò),例如 l = [1,2,3,4] for i in l: if i != 4: l.remove(i) print l 這幾句話本來意圖是想清空列表l,只留元素4,但是實(shí)際跑起來并不是那個(gè)結(jié)果。再看下面,利
推薦度:
導(dǎo)讀python的列表遍歷刪除實(shí)現(xiàn)代碼:python的列表list可以用for循環(huán)進(jìn)行遍歷,實(shí)際開發(fā)中發(fā)現(xiàn)一個(gè)問題,就是遍歷的時(shí)候刪除會(huì)出錯(cuò),例如 l = [1,2,3,4] for i in l: if i != 4: l.remove(i) print l 這幾句話本來意圖是想清空列表l,只留元素4,但是實(shí)際跑起來并不是那個(gè)結(jié)果。再看下面,利

python的列表list可以用for循環(huán)進(jìn)行遍歷,實(shí)際開發(fā)中發(fā)現(xiàn)一個(gè)問題,就是遍歷的時(shí)候刪除會(huì)出錯(cuò),例如

l = [1,2,3,4]
for i in l:
 if i != 4:
 l.remove(i)
print l

這幾句話本來意圖是想清空列表l,只留元素4,但是實(shí)際跑起來并不是那個(gè)結(jié)果。再看下面,利用index來遍歷刪除列表l

l = [1, 2, 3, 4]
for i in range(len(l)):
 if l[i] == 4:
 del l[i]

print l

這樣沒問題,可以遍歷刪除,但是列表l如果變?yōu)?l = [1,2,3,4,5]
如果還是按照上面的方法,設(shè)想一下,range開始的范圍是0-4,中間遍歷的時(shí)候刪除了一個(gè)元素4,這個(gè)時(shí)候列表變成了= [1,2,3,5],這時(shí)候就會(huì)報(bào)錯(cuò)了,提示下標(biāo)超出了數(shù)組的表示,原因就是上面說的遍歷的時(shí)候刪除了元素

所以python的list在遍歷的時(shí)候刪除元素一定要小心

可以使用filter過濾返回新的list

l = [1,2,3,4]
l = filter(lambda x:x !=4,l)
print l

這樣可以安全刪除l中值為4的元素了,filter要求兩個(gè)參數(shù),第一個(gè)是規(guī)則函數(shù),第二個(gè)參數(shù)要求輸入序列,而lambda這個(gè)函數(shù)的作用就是產(chǎn)生一個(gè)函數(shù),是一種緊湊小函數(shù)的寫法,一般簡單的函數(shù)可以這么些

或者可以這樣

l = [1,2,3,4]
l = [ i for i in l if i !=4]//同樣產(chǎn)生一個(gè)新序列,復(fù)值給l
print l

或者干脆建立新的list存放要?jiǎng)h除的元素

l = [1,2,3,4]
dellist = []
for i in l:
 if i == 4:
 dellist.append(i)
for i in dellist:
 l.remove(i)

這樣也能安全刪除元素
所以要遍歷的時(shí)候刪除元素一定要小心,特別是有些操作并不報(bào)錯(cuò),但卻沒有達(dá)到預(yù)期的效果

上面說到產(chǎn)生新序列,賦值等等,用python的id()這個(gè)內(nèi)置函數(shù)來看對(duì)象的id,可以理解為內(nèi)存中的地址,所以有個(gè)簡要說明
如果

l = [1,2,3,4]
ll = l
l.remove(1)
print l//肯定是[2,3,4]
print ll//這里會(huì)是什么?

如果用id函數(shù)查看的話就發(fā)現(xiàn)
print id(l),id(ll)
打印出相同的號(hào)碼,說明他們其實(shí)是一個(gè)值,也就是說上面的print ll將和l打印的一樣,所以python有這種性質(zhì),用的時(shí)候注意一下就行了

一般python書中會(huì)講到這個(gè)問題
遍歷的時(shí)候如果想更新列表本身
推薦的做法是使用切片
l = [1, 2, 3, 4]
for i in l[:]
some code

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

python的列表遍歷刪除實(shí)現(xiàn)代碼

python的列表遍歷刪除實(shí)現(xiàn)代碼:python的列表list可以用for循環(huán)進(jìn)行遍歷,實(shí)際開發(fā)中發(fā)現(xiàn)一個(gè)問題,就是遍歷的時(shí)候刪除會(huì)出錯(cuò),例如 l = [1,2,3,4] for i in l: if i != 4: l.remove(i) print l 這幾句話本來意圖是想清空列表l,只留元素4,但是實(shí)際跑起來并不是那個(gè)結(jié)果。再看下面,利
推薦度:
標(biāo)簽: 刪除 列表 代碼
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top