亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python

精通 Python 集合:创建、操作与集合运算

Python 集合

了解 Python 集合数据类型如何简化数据去重与集合运算。本指南涵盖创建、修改、删除及所有基本集合操作。

视频:Python 中的集合

集合是唯一、不可变项的无序集合。集合本身可变——允许添加或移除元素——但其元素必须可哈希(如数字、字符串、元组)。

Python 集合支持并集、交集、差集、对称差集等数学集合运算,使其成为数据去重、成员测试和集合代数的理想工具。


创建 Python 集合

用花括号或内置 set() 构造函数创建集合。元素可以是任何不可变类型,但列表、字典或其他集合等可变类型不能包含。

# 示例 1:不同数据类型的集合
# 整数集合
my_set = {1, 2, 3}
print(my_set)
# 混合数据类型集合
my_set = {1.0, 'Hello', (1, 2, 3)}
print(my_set)

输出

{1, 2, 3} {1.0, (1, 2, 3), 'Hello'}

注意重复值自动移除,且元组因不可变被接受。

# 移除重复项
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# 从列表构建集合
my_set = set([1, 2, 3, 2])
print(my_set)
# 尝试包含可变项会报错
# my_set = {1, 2, [3, 4]}  # TypeError: unhashable type: 'list'

输出

{1, 2, 3, 4} {1, 2, 3} Traceback (most recent call last): File "<string>", line 15, in <module> my_set = {1, 2, [3, 4]} TypeError: unhashable type: 'list'

创建空集合需用 set() 构造函数;{} 创建的是空字典。

# 区分创建空结构时的集合与字典
a = {}
print(type(a))
a = set()
print(type(a))

输出

<class 'dict'> <class 'set'>

修改 Python 集合

集合可变,但因无序不支持索引或切片。

用 add() 插入单个元素,update() 合并另一可迭代对象。重复项自动忽略。

# 示例:添加元素
my_set = {1, 3}
print(my_set)
# 尝试索引集合报错
# my_set[0]  # TypeError: 'set' object does not support indexing
# 添加单个元素
my_set.add(2)
print(my_set)
# 从列表添加多个元素
my_set.update([2, 3, 4])
print(my_set)
# 合并列表和另一集合
my_set.update([4, 5], {1, 6, 8})
print(my_set)

输出

{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8}

从集合移除元素

用 discard() 移除存在的元素,不存在则不报错。相比之下,remove() 在元素缺失时引发 KeyError。

# 示例:discard 对比 remove
my_set = {1, 3, 4, 5, 6}
print(my_set)
my_set.discard(4)
print(my_set)
my_set.remove(6)
print(my_set)
my_set.discard(2)
print(my_set)
# 以下将引发 KeyError
# my_set.remove(2)

输出

{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2

pop() 移除并返回任意元素,clear() 清空集合。

# pop 和 clear 示例
my_set = set("HelloWorld")
print(my_set)
print(my_set.pop())
print(my_set)
my_set.clear()
print(my_set)

输出

{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set()

Python 集合运算

Python 集合支持经典集合代数:并集、交集、差集、对称差集。可通过操作符或专用方法调用。

以两个示例集合为例:

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

并集

精通 Python 集合:创建、操作与集合运算

A 和 B 的并集包含所有不同元素。

print(A | B)

输出

{1, 2, 3, 4, 5, 6, 7, 8}

交集

精通 Python 集合:创建、操作与集合运算

交集仅返回两集合共有元素。

print(A & B)

输出

{4, 5}

差集

精通 Python 集合:创建、操作与集合运算

差集 A - B 列出在 A 中但不在 B 中的元素。

print(A - B)

输出

{1, 2, 3}

对称差集

精通 Python 集合:创建、操作与集合运算

对称差集 A ^ B 返回在任一集合中但不在两者中的元素。

print(A ^ B)

输出

{1, 2, 3, 6, 7, 8}

其他集合方法

以下是集合对象所有内置方法的快速参考:

方法描述
add()向集合添加元素
clear()移除所有元素
copy()返回浅拷贝
difference()返回调用者有但其他无的元素新集合
difference_update()原地差集移除
discard()元素存在则移除;不存在不报错
intersection()返回公共元素新集合
intersection_update()原地交集更新
isdisjoint()若集合无共同元素返回 True
issubset()若调用者是另一集合子集返回 True
issuperset()若调用者完全包含另一集合返回 True
pop()移除并返回任意元素;空集合引发 KeyError
remove()移除元素;缺失引发 KeyError
symmetric_difference()返回各集合独有元素新集合
symmetric_difference_update()原地对称差集更新
union()返回包含所有唯一元素的新集合
update()与另一可迭代对象原地并集

集合成员测试

用 in 关键字检查元素存在性。

my_set = set("apple")
print('a' in my_set)  # True
print('p' not in my_set)  # False

输出

True False

遍历集合

用标准 for 循环遍历集合;顺序不保证。

for letter in set("apple"):
    print(letter)

集合上的内置函数

len()、max()、min()、sum()、all()、any()、sorted() 等函数无缝支持集合。常用工具表:

函数描述
all()所有元素为真(或集合为空)返回 True
any()至少一个元素为真返回 True
enumerate()带索引迭代,便于调试
len()元素数量
max()最大元素
min()最小元素
sorted()返回集合排序后的列表
sum()所有数值元素求和

Python Frozenset

frozenset 是集合的不可变对应物。创建后元素不可变,使其可哈希,可用作字典键。

A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])

支持操作镜像常规集合,除变异方法外。

print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# 尝试添加元素引发 AttributeError
# A.add(3)  # AttributeError: 'frozenset' object has no attribute 'add'

Python

  1. 精通Python数据类型:实战指南
  2. 精通Python运算符:全面指南
  3. 精通Python Pass语句:实战指南
  4. 精通Python函数参数:位置、关键字与默认参数
  5. 精通 Python 字典:创建、操作与进阶技巧
  6. 精通 Python 迭代器:工作原理与自定义构建
  7. Python 闭包详解:嵌套函数如何捕获变量
  8. 精通 Python datetime:日期、时间与时区实战指南
  9. Python 语言概览:高级、可读、交互式与面向对象
  10. Python 数字类型详解:不可变数值数据的操作与数学函数
  11. Python 字符串完全指南:创建、访问、格式化与内置方法大全
  12. Python 元组详解:定义、使用与列表的核心区别