刪除list元素的方法-創新互聯

小編給大家分享一下刪除list元素的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

成都創新互聯是一家集網站建設,武義企業網站建設,武義品牌網站建設,網站定制,武義網站建設報價,網絡營銷,網絡優化,武義網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力??沙浞譂M足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。

先來看一段代碼:

# 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”刪除掉,為了發現它二在哪里,繼續舉兩個例子。

# 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']

這下問題清楚了,但凡相連元素的刪除,后面的那個元素總是能風騷走位。所以很明顯,是因為刪除的過程中,刪除了前一個元素后,整個列表會整體前移,索引值發生了改變,導致緊隨其后的元素在接下來的遍歷中無法被檢索。

解決方案:

上面其實出現了兩個問題,分別是刪除相同的所有元素及刪除兩個相鄰的元素,解決的思路也稍有不同。

刪除同一元素

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、一次遍歷創建新表
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"是最關鍵的解析式,如果我們對解析式進行修改,那么就可以刪除多個元素了。

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))

> []

小結

使用while或倒序循環的方法,可以刪除同一元素,而使用其他幾種方法,可以刪除任意元素,包括相鄰的元素。如果這些元素還具有其它特征,那可能會有其它更簡便的方法,比如使用itertools庫之類的。

pop、del與remove

最后順便說說列表中的這三個針對單個元素的刪除方法。上面重復用到的是remove,一開始寫的代碼也和remove的思路幾乎一致。但是這三個方法還是有一點區別的。

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 循環(或本質就是for循環的一切內容),刪除不當實際上是一個非常危險的bug,實際開發中,如果應該被刪除但是卻被漏掉的垃圾會不斷累積直到造成內存溢出。上面提供的方法應該可以解決大部分的情形了。

看完了這篇文章,相信你對刪除list元素的方法有了一定的了解,想了解更多相關知識,歡迎關注創新互聯-成都網站建設公司行業資訊頻道,感謝各位的閱讀!

文章標題:刪除list元素的方法-創新互聯
本文鏈接:http://m.kartarina.com/article26/dcjjjg.html

成都網站建設公司_創新互聯,為您提供響應式網站、小程序開發網站內鏈網站收錄做網站品牌網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站建設網站維護公司
主站蜘蛛池模板: 无码人妻精品一区二区三区久久久 | 国产av无码专区亚洲av桃花庵| 亚洲中文字幕久久精品无码VA| 国产裸模视频免费区无码| 亚洲av无码片在线播放| 亚洲AV无码AV日韩AV网站| 国产成人无码aa精品一区| 久久午夜无码免费| 久久无码AV中文出轨人妻| 无码无套少妇毛多69XXX| 无码国内精品人妻少妇| 亚洲国产精品成人精品无码区| 亚洲AV成人无码久久WWW| 无码国产福利av私拍| 亚洲一级Av无码毛片久久精品| 免费无码午夜福利片69| 东京热一精品无码AV| 日韩一区二区三区无码影院 | 无码国产69精品久久久久孕妇| 亚洲精品无码久久毛片| 亚洲精品无码av片| 亚洲国产精品无码久久久| av无码久久久久久不卡网站| 无码精品一区二区三区免费视频 | 精品无码国产污污污免费| 蜜桃臀无码内射一区二区三区| 亚洲av永久无码精品秋霞电影影院| 国产在线拍揄自揄拍无码视频| 日韩av片无码一区二区不卡电影| 国产精品免费无遮挡无码永久视频 | 精品人妻无码专区中文字幕 | 亚洲AV综合色区无码二区爱AV| 国产午夜无码专区喷水| 曰批全过程免费视频在线观看无码| 中文国产成人精品久久亚洲精品AⅤ无码精品| 精品无码一区二区三区电影| 少妇无码一区二区三区| 久久精品无码一区二区无码| 国产50部艳色禁片无码| 午夜福利无码不卡在线观看| 日韩免费人妻AV无码专区蜜桃|