当前位置:首页>python>Python Set 集合常用内置函数详解+完整代码演示

Python Set 集合常用内置函数详解+完整代码演示

  • 2026-10-11 06:34:07
Python Set 集合常用内置函数详解+完整代码演示

一、集合基础特性回顾

  1. 无序、元素唯一、可变集合set() / 不可变集合frozenset()
  2. 元素必须是不可变类型(数字、字符串、元组,不能列表/字典)
  3. 底层哈希表,查找、去重效率极高
# 创建集合
s1 = {1, 2, 3, 4}
s2 = set([3, 4, 5, 6])
empty_set = set()  # 空集合,不能用{}(空字典)

二、集合操作分类

1. 增删改(原地修改集合,仅可变set可用)

1.1 add() 添加单个元素

语法:set.add(item)

  • 元素存在则无变化,不存在则新增
s = {1, 2, 3}
s.add(4)
print(s)  # {1,2,3,4}
s.add(2)  # 重复元素不报错,无效果
print(s)  # {1,2,3,4}

1.2 update() 批量添加多个元素

语法:set.update(可迭代对象)支持列表、元组、字符串、另一个集合,自动拆分元素去重

s = {1, 2}
s.update([3, 4], (4, 5), "ab")
print(s)  # {1,2,3,4,5,'a','b'}

1.3 remove() 删除指定元素(不存在抛错KeyError)

s = {1, 2, 3}
s.remove(2)
print(s)  # {1,3}
# s.remove(99)  # 不存在元素,报错 KeyError

1.4 discard() 删除指定元素(不存在不报错,推荐)

s = {1, 2, 3}
s.discard(2)
s.discard(99)  # 无任何报错
print(s)  # {1,3}

1.5 pop() 随机删除并返回一个元素

集合无序,无法指定删除位置,空集合调用抛错

s = {10, 20, 30}
val = s.pop()
print("删除的元素:", val)
print("剩余集合:", s)

1.6 clear() 清空集合所有元素

s = {1, 2, 3}
s.clear()
print(s)  # set()

2. 集合数学运算(交集、并集、差集、对称差集)

两种写法:运算符 / 内置方法,方法支持传入可迭代对象,运算符只能集合之间运算

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

2.1 交集 intersection() &

同时存在于两个集合的元素

# 运算符
print(a & b)  # {3,4}
# 内置函数
print(a.intersection(b))  # {3,4}
# 多集合交集
print(a.intersection(b, {3, 7}))  # {3}

2.2 并集 union() |

两个集合所有元素,自动去重

print(a | b)  # {1,2,3,4,5,6}
print(a.union(b, [6, 7]))  # 可传列表

2.3 差集 difference() -

只在A、不在B的元素

print(a - b)  # {1,2}
print(a.difference(b))
print(b - a)  # {5,6}

2.4 对称差集 symmetric_difference() ^

只在其中一个集合,不同时存在的元素

print(a ^ b)  # {1,2,5,6}
print(a.symmetric_difference(b))

3. 原地更新运算(修改原集合,无返回值)

intersection_update() 原地交集

s = {1,2,3,4}
s.intersection_update({3,4,5})
print(s)  # {3,4}

update() / |= 原地并集

s = {1,2}
s |= {2,3}
print(s)  # {1,2,3}

difference_update() / -= 原地差集

s = {1,2,3,4}
s -= {3,4}
print(s)  # {1,2}

symmetric_difference_update() / ^= 原地对称差

s = {1,2,3}
s ^= {3,4}
print(s)  # {1,2,4}

4. 子集、超集、不相交判断(返回布尔值True/False)

x = {1, 2}
y = {1, 2, 3}
z = {4, 5}

issubset() / <= 判断子集

A所有元素都在B中:A是B子集

print(x.issubset(y))  # True
print(x <= y)         # True
print(y <= x)         # False

issuperset() / >= 判断超集

B包含A全部元素:B是A超集

print(y.issuperset(x))  # True
print(y >= x)           # True

isdisjoint() 判断是否无交集(完全不重合)

两个集合没有共同元素返回True

print(x.isdisjoint(z))  # True
print(x.isdisjoint(y))  # False

5. 通用内置函数(Python全局函数,非set方法)

len() 获取集合元素个数

s = {1, 2, 3}
print(len(s))  # 3

max() min() 最大最小值(元素必须可比较)

s = {5, 2, 9, 1}
print(max(s), min(s))  # 9 1

sorted() 将集合转为有序列表

集合本身无序,排序后返回list

s = {4, 1, 3, 2}
lst = sorted(s)
print(lst)  # [1,2,3,4]

list() / tuple() 集合转列表、元组

s = {1,2,3}
print(list(s))
print(tuple(s))

三、不可变集合 frozenset

无增删改方法(add/update/remove/pop/clear 全部不能用),可作为字典key

fs = frozenset([1,2,3])
print(fs & frozenset([3,4]))
# fs.add(5)  # 报错,不可修改

四、完整综合演示代码

# 1. 创建集合
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
print("原始集合1:", set1)
print("原始集合2:", set2)

# 2. 增删操作
set1.add(9)
set1.update([10, 11])
print("add+update后:", set1)
set1.discard(11)
set1.remove(10)
print("删除元素后:", set1)

# 3. 集合数学运算
print("交集 &:", set1 & set2)
print("并集 |:", set1 | set2)
print("差集 -:", set1 - set2)
print("对称差 ^:", set1 ^ set2)

# 4. 子集超集判断
temp = {4,5}
print("temp是set1子集?", temp.issubset(set1))
print("set1是temp超集?", set1.issuperset(temp))
print("无交集?", temp.isdisjoint({100, 200}))

# 5. 原地修改
test_set = {1,2,3}
test_set.intersection_update({2,3,4})
print("原地交集后:", test_set)

# 6. 通用函数
print("集合长度:", len(set1))
print("排序转列表:", sorted(set1))

五、常用方法速查表

方法
作用
是否修改原集合
add(x)
添加单个元素x
是
update(iter)
批量添加元素
是
remove(x)
删除x,不存在报错
是
discard(x)
删除x,不存在无操作
是
pop()
随机删除一个元素并返回
是
clear()
清空集合
是
intersection()
取交集,返回新集合
否
union()
取并集,返回新集合
否
difference()
取差集,返回新集合
否
symmetric_difference()
对称差集,返回新集合
否
issubset()
判断子集,返回布尔
否
issuperset()
判断超集,返回布尔
否
isdisjoint()
判断无交集,返回布尔
否

最新文章

随机文章