You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅实现保留重复元素的集合交集?

实现带重复项的集合交集

首先要明确:Python内置的set是无序且自动去重的,你示例里的s1 = {1, 1, 2, 3}实际会被解析为{1, 2, 3},丢失了重复元素,这也是intersection()只返回{1}的原因。要实现保留重复项的交集,你需要先改用可存储重复元素的容器(比如列表),再用collections.Counter处理,这是最优雅的方案:

代码实现

from collections import Counter

# 用列表存储带重复的元素,避免自动去重
s1 = [1, 1, 2, 3]
s2 = [4, 5, 1, 1]

# 取两个Counter的交集:保留共同元素,计数取两者的最小值
common_counts = Counter(s1) & Counter(s2)
# 展开为包含所有重复项的结果列表
result = list(common_counts.elements())

print(result)  # 输出: [1, 1]

关键逻辑说明

  1. Counter会统计每个元素的出现次数:Counter(s1)得到Counter({1:2, 2:1, 3:1}),Counter(s2)得到Counter({1:2, 4:1, 5:1})
  2. Counter的&操作符会生成新的Counter,仅包含两个Counter共有的元素,且每个元素的计数取两者中的较小值,这里得到Counter({1:2})
  3. common_counts.elements()会返回迭代器,按计数重复输出元素,转成列表后就是你需要的带重复项的交集结果。

注意:Python中不存在允许重复元素的set类型,你想要的{1, 1}在语法上是无效的(实际会被自动去重为{1}),所以用列表存储最终结果是合理的选择。

内容的提问来源于stack exchange,提问作者stas_provotorov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:52:34