当前位置: 首页 > news >正文

[Python编程] Python3 集合

对于 Python 初学者来说,掌握常用的数据结构是提升编程能力的关键。集合(set)作为 Python 中独特的数据结构,凭借 “无序不重复” 的特性,在去重、关系运算等场景中发挥着重要作用。

一、什么是 Python3 集合?

简单来说,Python3 集合(set)是一个无序的、不包含重复元素的序列。它就像一个 “去重容器”,自动过滤重复数据,同时支持交集、并集、差集等数学中的集合运算,非常适合处理需要 “唯一性” 或 “关系判断” 的问题。

比如统计用户输入的不重复关键词、判断两个列表的共同元素等场景,用集合处理会比列表更高效。

二、如何创建 Python3 集合?

创建集合有两种常用方式:用大括号{}直接创建,或用set()函数从其他数据结构(如列表、元组)转换而来。

1️⃣方式 1:大括号{}创建

直接在大括号中填入元素,元素之间用逗号分隔即可。
注意:大括号{}也用于创建字典,但字典是 “键值对” 形式(如{key: value}),而集合只有 “元素”,这点要区分开。

python

运行

# 用大括号创建集合
set1 = {1, 2, 3, 4}
# 打印集合类型,确认是set
print(type(set1))  # 输出:<class 'set'>

2️⃣方式 2:set()函数创建

如果已有列表、元组等数据,可通过set()函数将其转换为集合,同时自动去除重复元素。

python

运行

# 从列表创建集合(列表中有重复元素)
list1 = [4, 5, 6, 7, 7]  # 列表中的7重复
set2 = set(list1)
print(set2)  # 输出:{4, 5, 6, 7}(重复的7被自动删除)
print(type(set2))  # 输出:<class 'set'>

3️⃣关键特性:自动去重

集合最核心的特性之一就是 “不允许重复元素”,无论创建时是否包含重复值,最终都会被合并为唯一元素。

python

运行

# 示例:统计购物篮中的不重复水果
basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
# 转换为集合,自动去重
unique_fruits = set(basket)
print(unique_fruits)  # 输出:{'apple', 'orange', 'pear', 'banana'}

三、Python3 集合的基本操作

掌握集合的 “增、删、查、清空” 等基本操作,是使用集合的基础。以下是最常用的 5 种基本操作:

1️⃣添加元素

有两种添加元素的方法,适用于不同场景:

  • s.add(x):向集合s中添加单个元素x。如果x已存在,不会报错,也不会重复添加。
  • s.update(x):向集合s中添加多个元素,x可以是列表、元组、字典或另一个集合(会自动提取元素)。

python

运行

set1 = {1, 2, 3, 4}
# 1. add() 添加单个元素
set1.add(5)
print(set1)  # 输出:{1, 2, 3, 4, 5}# 2. update() 添加多个元素(这里添加一个集合)
set1.update({6, 7, 8})
print(set1)  # 输出:{1, 2, 3, 4, 5, 6, 7, 8}# update() 也支持列表
set1.update([9, 10])
print(set1)  # 输出:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

2️⃣移除元素

移除元素有 3 种常用方法,核心区别在于 “元素不存在时是否报错”:

  • s.remove(x):删除集合s中的元素x。如果x不存在,会直接报错(初学者需注意)。
  • s.discard(x):删除集合s中的元素x。如果x不存在,不会报错(更安全,推荐优先使用)。
  • s.pop():随机删除集合中的一个元素(因为集合无序,无法指定删除位置),返回被删除的元素。

python

运行

set1 = {1, 2, 3, 4, 5, 6, 7, 8}
# 1. remove() 删除存在的元素
set1.remove(2)
print(set1)  # 输出:{1, 3, 4, 5, 6, 7, 8}# 2. discard() 删除不存在的元素(不报错)
set1.discard(9)  # 9不在集合中,无报错,集合不变
print(set1)  # 输出:{1, 3, 4, 5, 6, 7, 8}# 3. pop() 随机删除一个元素
deleted_element = set1.pop()
print("被删除的元素:", deleted_element)  # 输出可能是1(随机)
print(set1)  # 输出:{3, 4, 5, 6, 7, 8}(假设删除了1)

3️⃣计算集合元素个数

len(s)函数即可获取集合s中元素的数量,用法和列表、字符串一致。

python

运行

set1 = {1, 2, 3, 4}
print(len(set1))  # 输出:4

4️⃣清空集合

s.clear()可以清空集合中的所有元素,清空后集合变为空集合(表示为set(),而非{},因为{}代表空字典)。

python

运行

set1 = {1, 2, 3, 4}
set1.clear()
print(set1)  # 输出:set()

5️⃣判断元素是否存在

x in s判断元素x是否在集合s中,返回True(存在)或False(不存在),效率比列表的in操作更高。

python

运行

set1 = {1, 2, 3, 4}
print(2 in set1)  # 输出:True
print(5 in set1)  # 输出:False

四、Python3 集合的内置方法(全解析)

除了基本操作,集合还提供了丰富的内置方法,用于实现交集、并集、子集判断等功能。下表整理了所有常用内置方法,包含功能说明和简单示例:

方法名功能说明示例(以set_a = {1,2,3}set_b = {3,4,5}为例)
add(x)向集合添加单个元素xset_a.add(4) → {1,2,3,4}
clear()清空集合所有元素,变为空集合set_a.clear() → set()
copy()拷贝一个新集合(浅拷贝,修改新集合不影响原集合)new_set = set_a.copy() → {1,2,3}
difference(set2)返回差集:原集合有、但set2没有的元素(原集合不变)set_a.difference(set_b) → {1,2}
difference_update(set2)原地差集:删除原集合中与set2相同的元素(原集合被修改)set_a.difference_update(set_b) → set_a变为{1,2}
discard(x)删除元素x,不存在则不报错set_a.discard(5) → set_a仍为{1,2,3}
intersection(set2)返回交集:原集合和set2都有的元素set_a.intersection(set_b) → {3}
isdisjoint(set2)判断两个集合是否 “无交集”,无交集返回True,有则返回Falseset_a.isdisjoint(set_b) → False(有交集 3)
issubset(set2)判断原集合是否是set2的子集(原集合所有元素都在set2中)set_a.issubset({1,2,3,4}) → True
issuperset(set2)判断原集合是否是set2的超集(set2所有元素都在原集合中)set_a.issuperset({1,2}) → True
pop()随机删除一个元素并返回该元素set_a.pop() → 可能返回 1,set_a变为{2,3}
remove(x)删除元素x,不存在则报错set_a.remove(5) → 报错(KeyError)
symmetric_difference(set2)返回对称差集:只在原集合或只在set2中的元素(无交集元素)set_a.symmetric_difference(set_b) → {1,2,4,5}
symmetric_difference_update(set2)原地对称差集:原集合变为对称差集元素(原集合被修改)set_a.symmetric_difference_update(set_b) → set_a变为{1,2,4,5}
union(set2)返回并集:原集合和set2的所有不重复元素set_a.union(set_b) → {1,2,3,4,5}
update(x)向集合添加多个元素,x可是列表、元组、集合等set_a.update([4,5]) → {1,2,3,4,5}
len(s)(函数,非方法)返回集合元素个数len(set_a) → 3

五、初学者常见问题 & 注意事项

  1. 空集合的创建:不能用{}创建空集合({}是空字典),必须用set()
    错误:empty_set = {}(类型是 dict);正确:empty_set = set()(类型是 set)。

  2. remove() vs discard():删除元素时,优先用discard(),避免因元素不存在导致报错;如果确认元素一定存在,可用remove()

  3. 集合的无序性:集合没有索引,不能通过set[0]这样的方式访问元素,只能通过in判断存在性或for循环遍历。

  4. 元素类型限制:集合的元素必须是 “不可变类型”(如整数、字符串、元组),不能是列表、字典等可变类型(会报错)。
    错误:set1 = {[1,2], 3}(列表是可变类型);正确:set1 = {(1,2), 3}(元组是不可变类型)。

总结

Python3 集合是一种 “高效去重 + 关系运算” 的工具,核心特性是无序、不重复。本文从定义、创建、基本操作到内置方法,覆盖了集合的所有重点知识,尤其适合初学者入门。


文章转载自:

http://11fSnHF4.Lbbrw.cn
http://BB5rVB9q.Lbbrw.cn
http://TWsewK8z.Lbbrw.cn
http://fgP6od9b.Lbbrw.cn
http://k68QRq3d.Lbbrw.cn
http://4ynlY9JP.Lbbrw.cn
http://Swon4HXo.Lbbrw.cn
http://sod7OjJj.Lbbrw.cn
http://q5Om7P6w.Lbbrw.cn
http://tNDkKjVj.Lbbrw.cn
http://oRiv4a3X.Lbbrw.cn
http://LIgAdnMq.Lbbrw.cn
http://waUzEsyC.Lbbrw.cn
http://UxsAwAdx.Lbbrw.cn
http://lu0QcMqX.Lbbrw.cn
http://kA5VJt8g.Lbbrw.cn
http://JKih6n0r.Lbbrw.cn
http://rJuitFMo.Lbbrw.cn
http://75ntHNVy.Lbbrw.cn
http://laMFyZAV.Lbbrw.cn
http://NTmTHr6X.Lbbrw.cn
http://LMFR99RQ.Lbbrw.cn
http://5akFg4qZ.Lbbrw.cn
http://fM63lkzt.Lbbrw.cn
http://F5gRXgp6.Lbbrw.cn
http://V8gXBHZ5.Lbbrw.cn
http://kuoUmnBp.Lbbrw.cn
http://erEq7ojr.Lbbrw.cn
http://o5zlQJb6.Lbbrw.cn
http://tYOFQARZ.Lbbrw.cn
http://www.dtcms.com/a/388426.html

相关文章:

  • [性能分析与优化]伪共享问题(perf + cpp)
  • OC-动画实现折叠cell
  • 关于层级问题
  • Linux基础命令汇总
  • getchar 和 putchar
  • 【序列晋升】35 Spring Data Envers 轻量级集成数据审计
  • 快速入门HarmonyOS应用开发(二)
  • 绿联、极空间、飞牛NAS无需安装,实现快速远程访问
  • Datawhale 理工科-大模型入门实训课程 202509 第1次作业
  • 城市治理综合管理平台
  • 《嵌入式硬件(十三):基于IMX6ULL的增强型中断周期定时器(EPIT)操作》
  • PM2 入门指南与常用命令(含 开机自启、Node.js 及 Java 服务部署)
  • 汽车多核架构中内存系统故障检测的改进算法
  • C++真的比Python更快吗?
  • 【实操分享】使用 SeeDream 4.0 进行 AI 修图——开启专属“AI 云旅拍”
  • 不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
  • Python中正则的三个基础方法
  • 最外层的项目没有父pom配置文件,有很多子模块(maven项目)导入idea中,左侧模块显示不全问题解决
  • 前端将一个 DOM 元素滚动到视口顶部
  • 前端-防重复点击/防抖的方案
  • doris数据库问题
  • PyQt5中实现只读QLineEdit控件的完整指南
  • 金融工程vs金融数学:谁更贴近量化交易?
  • LeetCode 167.两数之和 II - 输入有序数组
  • 小杰机器学习高级(one)——激活函数——sigmoid、tanh、Relu、Leaky Relu、Prelu、ELU、softmax
  • OpenAI原生调用 vs LangChain调用方式的关系
  • [Token剪枝]Token Cropr: 针对众多任务的更快ViT, CVPR2025
  • NW725NW743美光固态闪存NW727NW734
  • 【Linux】归档、压缩、用户管理
  • Lattice FPGA 开发流程(以 ECP5 为例)