Python中含重复元素的两个列表求交集的方法
计算含重复元素的两个列表的交集
要解决这个问题,核心是保留元素的重复次数,取两个列表中每个元素出现次数的最小值。下面提供两种实用的实现方式:
方法一:使用collections.Counter(推荐)
Python标准库的Counter可以方便地统计元素出现次数,我们只需对共同元素取最小次数并展开即可:
from collections import Counter list1 = [1,2,3,4,4,4,5] list2 = [4,4,5,5,6] # 统计两个列表的元素频次 count1 = Counter(list1) count2 = Counter(list2) intersection = [] for num in count1: if num in count2: # 取当前元素在两个列表中出现次数的最小值,扩展到结果列表 intersection.extend([num] * min(count1[num], count2[num])) print(intersection) # 输出: [4,4,5]
方法二:手动统计频次(无需导入库)
如果不想依赖标准库,可以手动统计其中一个列表的元素次数,再遍历另一个列表生成结果:
list1 = [1,2,3,4,4,4,5] list2 = [4,4,5,5,6] # 手动统计list1中各元素的出现次数 count_dict = {} for num in list1: count_dict[num] = count_dict.get(num, 0) + 1 intersection = [] for num in list2: # 若当前元素还有剩余计数,则加入结果并减少计数 if count_dict.get(num, 0) > 0: intersection.append(num) count_dict[num] -= 1 print(intersection) # 输出: [4,4,5]
关于pandas的intersection()为什么不适用
pandas的intersection()是基于集合实现的,集合的特性会自动去重,因此只能得到去重后的元素集合(如示例中的{4,5}),无法保留重复元素的出现次数,所以不符合你的需求。
内容的提问来源于stack exchange,提问作者Louis Lalas
相关产品推荐
相关产品推荐

