Python算法竞赛:集合去重+字典映射 核心用法一站式整理

在Python算法竞赛中,集合(set) 字典(dict)是两个高频使用的内置数据结构,二者分工明确:集合专注于去重、集合运算 ,字典专注于键值映射、元素计数。本文整理了这两个数据结构的核心语法、竞赛常用写法,直接套用即可快速解决对应场景的题目。

一、集合(set):去重专用神器

集合的核心特性:元素无序、不可重复 ,是算法竞赛中实现快速去重的最优选择。

1. 核心基础语法

⚠️ 关键注意点:

  • 空集合必须用 set() 定义,{} 默认是空字典!
  • 非空集合可直接写 {元素1, 元素2}
python 复制代码
# 1. 定义空集合
s = set()
# s = {} ❌ 错误:这是空字典,不是集合

# 2. 添加元素:add()
s.add('hello')
s.add('world')
s.add('hello')  # 重复添加,自动去重,无效果
print(s)  # 输出:{'hello', 'world'}(无序,顺序可能变化)

# 3. 删除元素:remove()
s.remove('hello')
print(s)  # 输出:{'world'}

# 4. 成员判断:in(时间复杂度O(1),比列表快!)
print('world' in s)  # 输出:True
print('hello' in s)  # 输出:False

2. 竞赛常用集合运算

处理多集合的交、并、差、对称差集,是字符串/数组去重、匹配类题目的常用操作:

python 复制代码
a = {1, 2, 3}
b = {3, 4, 5}

# 并集:两个集合所有元素(去重)
print(a.union(b))  # {1,2,3,4,5} 
# 交集:两个集合共有的元素
print(a.intersection(b))  # {3}
# 差集:a中有、b中没有的元素
print(a.difference(b))  # {1,2}
# 对称差:只在其中一个集合出现,不同时出现的元素(并集-交集)
print(a.symmetric_difference(b))  # {1,2,4,5}
# 对称差运算符(极简写法,竞赛推荐)
print(a ^ b)  # 效果同上,输出 {1,2,4,5}
# 同样 | & - 也可以

二、字典(dict):映射/计数利器

字典是键值对(key-value)结构,核心作用:建立唯一键到值的映射,算法竞赛中最常用于元素频次统计(字符计数、数字计数)。

1. 竞赛标准写法:快速输入+元素计数

算法竞赛中常用 sys.stdin 加速输入,字典统计元素频率是必考场景,提供基础写法极简写法两种方案:

python 复制代码
import sys
# 竞赛加速输入:替代input(),读取更快
input = lambda: sys.stdin.readline().strip()

# 读取输入字符串
s = input()

# 1. 定义空字典
d = dict()  # 等价于 d = {}

# 2. 方案1:基础写法(if判断键是否存在)
for i in s:
    # 键不存在:初始化值为1
    if i not in d:
        d[i] = 1
    # 键存在:值+1
    else:
        d[i] += 1

# 方案2:极简写法(get()方法,推荐!)
# dict.get(key, default):key存在返回值,不存在返回默认值0
# for i in s:
#     d[i] = d.get(i, 0) + 1

# 3. 遍历字典:键值对、键、值
print("=== 键值对遍历 ===")
for key, value in d.items():
    print(f'{key}:{value}')

print("=== 所有键 ===")
print(d.keys())  # 输出所有key
print("=== 所有值 ===")
print(d.values())  # 输出所有value

示例运行

输入:abcabc

输出:

复制代码
=== 键值对 ===
a:2
b:2
c:2
=== 所有键 ===
dict_keys(['a', 'b', 'c'])
=== 所有值 ===
dict_values([2, 2, 2])

三、核心总结

  1. 集合(set)

    • 用途:去重、成员判断、集合交并差/对称差运算
    • 定义:空集合 set(),非空 {x,y,z}
    • 核心方法:add()remove()in
    • 对称差:symmetric_difference() / ^,找两个集合的独有元素
  2. 字典(dict)

    • 用途:键值映射、元素频次统计
    • 竞赛神器:dict.get(key, 0) + 1 一行实现计数
    • 遍历:items()(键值对)、keys()(键)、values()(值)

这两个数据结构是Python算法竞赛的基础工具,熟练掌握写法,能大幅提升编码效率!

总结

  1. 集合是去重专属 ,空集合必须用 set(){} 是字典;
  2. 字典是映射/计数专属get() 方法是竞赛计数的最优极简写法;
  3. 对称差 ^ 用于找两个集合互不重叠的元素,竞赛高频使用;
  4. 二者的成员判断(in)时间复杂度均为 O(1),远优于列表,竞赛中优先使用。
相关推荐
星云穿梭1 小时前
用Python写一个带图形界面的学生管理系统——完整教程
python
Jack201 小时前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
金銀銅鐵1 小时前
用 Pygame 实现 15 puzzle
python·数学·游戏
小小杨树2 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
黄忠7 小时前
大模型之LangGraph技术体系
python·llm
JieE21218 小时前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE21219 小时前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
hboot19 小时前
AI工程师第二课 - 数据处理
人工智能·python·数据分析
vivo互联网技术1 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像