小編給大家分享一下刪除list元素的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),武義企業(yè)網(wǎng)站建設(shè),武義品牌網(wǎng)站建設(shè),網(wǎng)站定制,武義網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,武義網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。先來看一段代碼:
# Delete elements from a list def remove_list(li,drop_list): for i in li: inx = li.index(i) if i in drop_list: del li[inx] print(li) li1 = [1, 2, 2, 2, 3] drop_list = [2] remove_list(li, drop_list) > [1, 2, 3]
這段代碼并沒有把所有“2”刪除掉,為了發(fā)現(xiàn)它二在哪里,繼續(xù)舉兩個例子。
# Delete a2 & a3 li2 = ["a1", "a2", "a3", "a4", "a5", "a6", "a7"] drop_list = ["a2", "a3"] remove_list(li, drop_list) > ['a1', 'a3', 'a4', 'a5', 'a6', 'a7'] #Delete all the list li3 = ["a1", "a2", "a3", "a4", "a5", "a6", "a7"] drop_list = ["a1", "a2", "a3", "a4", "a5", "a6", "a7"] remove_list(li, drop_list) > ['a2', 'a4', 'a6']
這下問題清楚了,但凡相連元素的刪除,后面的那個元素總是能風騷走位。所以很明顯,是因為刪除的過程中,刪除了前一個元素后,整個列表會整體前移,索引值發(fā)生了改變,導致緊隨其后的元素在接下來的遍歷中無法被檢索。
解決方案:
上面其實出現(xiàn)了兩個問題,分別是刪除相同的所有元素及刪除兩個相鄰的元素,解決的思路也稍有不同。
刪除同一元素
1、可以使用while和remove的組合
while 2 in li1: li1.remove(2) print(li1) > [1, 3] # 2、倒序遍歷法 for i in li1[::-1]: if i == 2: li1.remove(i) print(li1) > [1, 3]
刪除相鄰元素
1、列表解析
new_li2 = [i for i in li2 if i != "a2" or i != "a3"] print(new_li2) > ['a1', 'a4', 'a5', 'a6', 'a7'] # 2、使用filter new_li2 = filter(lambda i: i != "a2" or i != "a3", li2) print(list(new_li2)) > ['a1', 'a4', 'a5', 'a6', 'a7'] # 3、一次遍歷創(chuàng)建新表 new_li2 = [] for i in li2: if i != "a2" or i != "a3": new_li2.append(temp) print(list(new_li2)) > ['a1', 'a4', 'a5', 'a6', 'a7']
其實可以看到,在這個例子中,i!="a2" or i!="a3"i !=" a 2 " \text { or } i !=" a 3 "i!="a2" or i!="a3"是最關(guān)鍵的解析式,如果我們對解析式進行修改,那么就可以刪除多個元素了。
new_li3 = [] for i in li3: if i not in ["a1", "a2", "a3", "a4", "a5", "a6", "a7"]: new_li3.append(temp) print(list(new_li3)) > []
小結(jié)
使用while或倒序循環(huán)的方法,可以刪除同一元素,而使用其他幾種方法,可以刪除任意元素,包括相鄰的元素。如果這些元素還具有其它特征,那可能會有其它更簡便的方法,比如使用itertools庫之類的。
pop、del與remove
最后順便說說列表中的這三個針對單個元素的刪除方法。上面重復用到的是remove,一開始寫的代碼也和remove的思路幾乎一致。但是這三個方法還是有一點區(qū)別的。
li4 = [1, 2, "a1", "a2", "a1"] # 使用del語句可以刪除任何位置處的列表元素,條件是知道索引 print(del li4[2]) > [1, 2, "a2", "a1"] # pop是列表自帶的方法,和del幾乎一樣,缺省值意味刪除最后一個元素,也需要知道索引 print(li4.pop()) print(li4.pop(2)) > [1, 2, "a1", "a2"] > [1, 2, "a2", "a1"] # remove針對不知道元素在列表中的位置,但知道元素的值的情形,但對于多個相同的元素,只能刪除第一個 # 使用上面說的while就可以刪除多個相同元素 print(li4.remove("a1")) print((li4.remove("a1")).remove("a1")) > [1, 2, "a2", "a1"] > [1, 2, "a2"]
刪除列表中指定元素時,最好不要用 for 循環(huán)(或本質(zhì)就是for循環(huán)的一切內(nèi)容),刪除不當實際上是一個非常危險的bug,實際開發(fā)中,如果應該被刪除但是卻被漏掉的垃圾會不斷累積直到造成內(nèi)存溢出。上面提供的方法應該可以解決大部分的情形了。
看完了這篇文章,相信你對刪除list元素的方法有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!