Python中如何通过比较两个列表移除其中的共同元素
解决Python中移除两个列表共同元素的问题
原代码踩了个常见的坑:遍历列表的同时直接修改列表本身,会导致遍历过程跳过元素。比如你输入A=[4,1,3,2]、B=[3,1]时,遍历到1并移除后,列表A变成[4,3,2],但for循环的迭代器是基于初始列表生成的,接下来会直接跳到原列表索引2对应的元素(也就是现在的2),漏掉了对3的检查,最终输出结果不符合预期。
下面给你几种靠谱的解决方法:
方法1:新建列表存结果
遍历原列表A,把不在B里的元素挨个加到新列表里,完全不会干扰遍历过程:
A = [int(x) for x in input('Enter your elements: ').split()] B = [int(y) for y in input('Enter your elements: ').split()] result = [] for num in A: if num not in B: result.append(num) print(result)
方法2:用列表推导式简化写法
这是Python里更简洁的方式,逻辑和方法1完全一致,一行搞定结果生成:
A = [int(x) for x in input('Enter your elements: ').split()] B = [int(y) for y in input('Enter your elements: ').split()] result = [num for num in A if num not in B] print(result)
方法3:转集合提速(元素多的时候用)
如果你的列表元素数量比较大,把B转成集合能大幅提升in操作的速度——集合的成员查询是O(1),列表是O(n),数据量越大差异越明显:
A = [int(x) for x in input('Enter your elements: ').split()] B = [int(y) for y in input('Enter your elements: ').split()] B_set = set(B) result = [num for num in A if num not in B_set] print(result)
测试这几种方法,输入A为4 1 3 2、B为3 1,都会输出[4, 2],刚好符合你的需求。
内容的提问来源于stack exchange,提问作者EE 217
相关产品推荐
相关产品推荐

