Python编程实战 · 基础入门篇 | 集合(set)

在 Python 的基础数据结构中,除了列表(list)、元组(tuple)、字典(dict),还有一种特殊但非常实用的数据类型------集合(set) 。 集合的最大特点是:不重复、无序、可进行集合运算。 它常用于去重、数据筛选、关系判断等场景,是数据处理中的高效利器。


一 什么是集合(set)

集合(Set)是一种 无序、可变 的数据容器, 用于存放 不重复的元素

在 Python 中,可以通过 {}set() 创建集合。

python 复制代码
fruits = {"apple", "banana", "cherry"}
print(fruits)   # {'banana', 'cherry', 'apple'}

集合中的元素是 唯一的,如果你放入重复项,Python 会自动去重。

python 复制代码
nums = {1, 2, 2, 3, 3, 3}
print(nums)  # {1, 2, 3}

二 创建集合的几种方式

1. 使用花括号 {}

python 复制代码
colors = {"red", "green", "blue"}

2. 使用 set() 函数

python 复制代码
numbers = set([1, 2, 3, 4])

3. 创建空集合

⚠ 注意:创建空集合必须用 set(), 因为 {} 默认是一个空字典。

python 复制代码
empty_set = set()
print(type(empty_set))  # <class 'set'>

三 集合的常见操作

1. 添加元素

python 复制代码
s = {1, 2, 3}
s.add(4)
print(s)  # {1, 2, 3, 4}

2. 更新(合并)多个元素

python 复制代码
s.update([5, 6, 7])
print(s)  # {1, 2, 3, 4, 5, 6, 7}

3. 删除元素

python 复制代码
s.remove(3)      # 删除指定元素,不存在时报错
s.discard(10)    # 删除指定元素,不存在也不报错
s.pop()          # 随机删除一个元素
s.clear()        # 清空集合

四 集合的运算(重点)

集合支持多种数学意义上的集合运算,非常直观。

假设我们有以下两个集合:

python 复制代码
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
运算 符号 示例 结果
并集 ` ` `A B` {1, 2, 3, 4, 5, 6}
交集 & A & B {3, 4}
差集 - A - B {1, 2}
对称差集 ^ A ^ B {1, 2, 5, 6}

示例代码:

python 复制代码
print(A | B)  # 并集
print(A & B)  # 交集
print(A - B)  # 差集
print(A ^ B)  # 对称差集

五 集合的关系运算

集合之间可以比较包含关系:

python 复制代码
A = {1, 2, 3}
B = {1, 2, 3, 4, 5}

print(A < B)   # True,A 是 B 的子集
print(B > A)   # True,B 是 A 的超集
print(A == B)  # False
print(A != B)  # True

六 集合推导式

Python 同样支持 集合推导式(set comprehension), 可以快速生成集合。

python 复制代码
squares = {x**2 for x in range(1, 6)}
print(squares)  # {1, 4, 9, 16, 25}

还可以加条件过滤:

python 复制代码
even_squares = {x**2 for x in range(1, 11) if x % 2 == 0}
print(even_squares)  # {4, 16, 36, 64, 100}

七 集合的去重功能

集合最常见的用途之一就是 去重

python 复制代码
numbers = [1, 2, 2, 3, 3, 4]
unique_numbers = list(set(numbers))
print(unique_numbers)  # [1, 2, 3, 4]

⚠ 注意:集合是无序的,因此去重后的顺序可能与原列表不同。


八 集合的遍历

集合是可迭代的,可以直接用 for 遍历:

python 复制代码
fruits = {"apple", "banana", "cherry"}
for fruit in fruits:
    print(fruit)

由于集合无序,输出顺序可能每次都不一样。


九 集合的不可变版本:frozenset

在某些场景中,我们希望集合也能作为字典的键或放入另一个集合中。 这时可以使用 不可变集合(frozenset)

python 复制代码
A = frozenset([1, 2, 3])
B = frozenset([3, 4, 5])

print(A | B)  # {1, 2, 3, 4, 5}

frozenset 支持所有集合运算,但不支持修改(add、remove 等)。


十 实战案例:网站用户分析

假设我们要分析两个网站的访问用户重叠情况:

python 复制代码
site_A = {"Tom", "Lucy", "Jack", "Emma"}
site_B = {"Lucy", "Emma", "John"}

print("A站用户:", site_A)
print("B站用户:", site_B)
print("同时访问两站的用户:", site_A & site_B)
print("只访问A站的用户:", site_A - site_B)
print("所有用户:", site_A | site_B)

输出结果:

arduino 复制代码
同时访问两站的用户: {'Lucy', 'Emma'}
只访问A站的用户: {'Jack', 'Tom'}
所有用户: {'Jack', 'Lucy', 'Emma', 'Tom', 'John'}

十一 小结

特点 说明
是否有序 ❌ 无序
是否可变 ✅ 可变(frozenset 为不可变)
是否允许重复 ❌ 不允许
创建方式 {}set()
主要功能 去重、集合运算、关系判断
常用操作 add()update()remove()union()intersection()
推导式 支持集合推导式

✅ 总结

  1. 集合(set)是无序且不重复的容器。
  2. 常用于数据去重、过滤和集合关系计算。
  3. 支持数学集合的四大运算:并集、交集、差集、对称差集。
  4. 可以使用集合推导式快速生成集合。
  5. 如果需要不可变集合,可使用 frozenset

相关推荐
IT_陈寒3 小时前
Python 3.12震撼发布:5大性能优化让你的代码提速50%,第3点太香了!
前端·人工智能·后端
B站_计算机毕业设计之家4 小时前
计算机视觉:python车牌识别检测系统 YOLOv8 深度学习pytorch技术 LPRNet车牌识别算法 CCPD2020数据集 ✅
大数据·python·深度学习·机器学习·计算机视觉·数据分析·车牌识别
这个世界的真神4 小时前
【每日算法】 洛谷 P12341 【[蓝桥杯 2025 省 A/Python B 第二场] 消消乐】 2025.10.26
python·算法·蓝桥杯
风象南4 小时前
BSON vs JSON:不只是"二进制"这么简单
后端
l1t4 小时前
利用DeepSeek改写递归CTE SQL语句为Python程序及优化
数据库·人工智能·python·sql·算法·性能优化·deepseek
Victor3565 小时前
Redis(87)Redis缓存的LRU淘汰策略如何配置?
后端
寄思~5 小时前
python批量读取word表格写入excel固定位置
开发语言·python·excel
Victor3565 小时前
Redis(86)Redis缓存的命中率如何提高?
后端
人间乄惊鸿客6 小时前
python — day9
开发语言·python