Python如何提取两个列表的共同元素并去除重复值
解决方案
问题原因
你现有代码输出重复值的原因很简单:输入列表a本身就包含两个重复的元素1,遍历a时只要元素存在于b中就直接打印,自然会输出两次1。
最简实现(推荐)
利用Python集合的特性:集合会自动去重,且内置交集计算逻辑,完全适配任意长度的输入列表,一行代码即可完成需求:
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] # 计算交集后转列表,顺序可能和原列表不一致,不要求顺序的话优先用这个 result = list(set(a) & set(b)) # 也可以写为 result = list(set(a).intersection(b)),效果完全一致 print(result)
保留循环逻辑的实现
如果你不想用集合,想沿用你之前的循环写法,可以额外初始化一个空列表存储结果,每次添加元素前先判断是否已经存在于结果列表中,避免重复:
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13] result = [] for x in a: if x in b and x not in result: result.append(x) print(result)
如果你需要最终结果的顺序和元素在a中首次出现的顺序一致,选这个方案即可。
两种方案最终输出的无重复共同元素都是[1, 2, 3, 5, 8, 13]。
内容的提问来源于stack exchange,提问作者Yigit148
相关产品推荐
相关产品推荐

