删除list元素的方法
小编给大家分享一下删除list元素的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!
先来看一段代码:
#Deleteelementsfromalistdefremove_list(li,drop_list):foriinli:inx=li.index(i)ifiindrop_list:delli[inx]print(li)li1=[1,2,2,2,3]drop_list=[2]remove_list(li,drop_list)>[1,2,3]
这段代码并没有把所有“2”删除掉,为了发现它二在哪里,继续举两个例子。
#Deletea2&a3li2=["a1","a2","a3","a4","a5","a6","a7"]drop_list=["a2","a3"]remove_list(li,drop_list)>['a1','a3','a4','a5','a6','a7']#Deleteallthelistli3=["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的组合
while2inli1:li1.remove(2)print(li1)>[1,3]#2、倒序遍历法foriinli1[::-1]:ifi==2:li1.remove(i)print(li1)>[1,3]
删除相邻元素
1、列表解析
new_li2=[iforiinli2ifi!="a2"ori!="a3"]print(new_li2)>['a1','a4','a5','a6','a7']#2、使用filternew_li2=filter(lambdai:i!="a2"ori!="a3",li2)print(list(new_li2))>['a1','a4','a5','a6','a7']#3、一次遍历创建新表new_li2=[]foriinli2:ifi!="a2"ori!="a3":new_li2.append(temp)print(list(new_li2))>['a1','a4','a5','a6','a7']
其实可以看到,在这个例子中,i!="a2"ori!="a3"i !=" a 2 " \text { or } i !=" a 3 "i!="a2"ori!="a3"是最关键的解析式,如果我们对解析式进行修改,那么就可以删除多个元素了。
new_li3=[]foriinli3:ifinotin["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(delli4[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元素的方法有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。