国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python 的列表遍歷刪除實現代碼

2019-11-25 17:03:01
字體:
來源:轉載
供稿:網友

python的列表list可以用for循環進行遍歷,實際開發中發現一個問題,就是遍歷的時候刪除會出錯,例如

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

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

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

這樣沒問題,可以遍歷刪除,但是列表l如果變為 l = [1,2,3,4,5]
如果還是按照上面的方法,設想一下,range開始的范圍是0-4,中間遍歷的時候刪除了一個元素4,這個時候列表變成了= [1,2,3,5],這時候就會報錯了,提示下標超出了數組的表示,原因就是上面說的遍歷的時候刪除了元素

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

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

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

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

或者可以這樣

l = [1,2,3,4]l = [ i for i in l if i !=4]//同樣產生一個新序列,復值給lprint l

或者干脆建立新的list存放要刪除的元素

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

這樣也能安全刪除元素
所以要遍歷的時候刪除元素一定要小心,特別是有些操作并不報錯,但卻沒有達到預期的效果

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大港区| 恭城| 莲花县| 湘潭县| 梨树县| 正宁县| 巨鹿县| 宁阳县| 芦山县| 商都县| 鱼台县| 屏边| 古浪县| 海门市| 张北县| 土默特左旗| 根河市| 绥德县| 南澳县| 广丰县| 吉木萨尔县| 饶阳县| 晋宁县| 临城县| 罗田县| 志丹县| 秀山| 汉中市| 临高县| 前郭尔| 临潭县| 静乐县| 怀仁县| 读书| 吴旗县| 舒城县| 治多县| 鄂温| 历史| 施甸县| 岳阳县|