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 小时前
【langchain 1.0】ChromaDB 原生 API 实战:为 LangChain 向量库打造管理工具集
python·ai·langchain
Sirius.z1 小时前
第J6周:Inception v1算法实战
python
山上三树1 小时前
Python 高频报错速查表(开发通用版)
开发语言·python
Wonderful U1 小时前
AI智能日志异常检测告警平台:告别人工排查,秒级定位线上故障
数据库·人工智能·python·django
Deepoch2 小时前
Deepoc数学大模型:驱动发动机行业数智化转型的底层解
人工智能·算法·deepoc·数学大模型
MY_TEUCK2 小时前
【MYTRUCK - AI 应用】MetaGPT 0.8.2 安装与排错完整实录(Python 3.10 + 虚拟环境)
开发语言·人工智能·python·ai
happymaker06262 小时前
LeetCodeHot100——盛水最多的容器
数据结构·算法·leetcode·双指针·hot100
3DVisionary2 小时前
蓝光三维扫描:磁性轴承全尺寸精密3D检测方案
算法·3d·3d检测·蓝光三维扫描·精密检测·磁性轴承·圆度测量
广_2 小时前
用AI写一个Python实时硬件监控与日志可视化界面
开发语言·人工智能·python