Python如何移除listA中所有存在于listB中的元素
问题原因
你原有代码的逻辑是对listB中的每个元素仅执行一次remove()操作,而Python列表的remove()方法默认只会删除列表中第一个匹配的元素,所以listA中后续重复出现的属于listB的元素会被保留,无法达到全部删除的效果。
推荐解决方案
方法1:列表推导式(性能最优、写法简洁)
如果listB元素数量较多,建议先将listB转为集合,in操作在集合中查询的时间复杂度为O(1),远高于列表的O(n):
listA = ['A', 'B','C','D','1','2','3', 'A', 'D','2'] listB = ['A', 'B','C','D'] exclude_set = set(listB) listA = [item for item in listA if item not in exclude_set]
运行后listA的结果即为你期望的['1', '2', '3', '2']。
方法2:循环调用remove删除所有匹配项(不推荐,性能较低)
如果你需要保留原有修改原listA的逻辑而不是生成新列表,可以对每个要删除的元素循环判断,直到列表中不存在该元素为止:
listA = ['A', 'B','C','D','1','2','3', 'A', 'D','2'] listB = ['A', 'B','C','D'] for del_item in listB: while del_item in listA: listA.remove(del_item)
注意:不要直接在遍历listA的同时删除listA的元素,会导致索引偏移出现漏删的问题。
内容的提问来源于stack exchange,提问作者Samuel Jackson
相关产品推荐
相关产品推荐

