Python中remove仅删列表首个匹配项,如何删除全部指定元素?
如何删除Python列表中所有匹配的指定元素
Python内置的list.remove()方法确实只会删除第一个匹配到的元素,要删除所有符合条件的元素可以使用以下几种方案:
方案1:列表推导式(优先推荐)
这是性能最优、写法最简洁的方案,直接通过推导式生成排除了目标元素的新列表:
names = ['rohitsharma','msd','Brettlee','Dravid','rohitsharma','akhil','python','rohitsharma','dhoni','rohitsharma','rohitsharma'] # 保留所有不等于'rohitsharma'的元素 names = [item for item in names if item != 'rohitsharma'] print(names)
如果需要保留原列表,只需将推导式结果赋值给新变量即可,不要直接覆盖原变量。
方案2:循环调用remove方法
如果必须使用remove方法实现,可以配合while循环判断目标元素是否还存在于列表中,存在就执行删除:
names = ['rohitsharma','msd','Brettlee','Dravid','rohitsharma','akhil','python','rohitsharma','dhoni','rohitsharma','rohitsharma'] target = 'rohitsharma' while target in names: names.remove(target) print(names)
注意:该方案每次调用remove都会遍历列表查找元素,列表数据量大时性能较差,仅适合小体量列表使用
方案3:filter函数过滤
也可以通过filter过滤器实现筛选,转换为列表即可得到结果:
names = ['rohitsharma','msd','Brettlee','Dravid','rohitsharma','akhil','python','rohitsharma','dhoni','rohitsharma','rohitsharma'] names = list(filter(lambda x: x != 'rohitsharma', names)) print(names)
内容的提问来源于stack exchange,提问作者Milan_sir7
相关产品推荐
相关产品推荐

