Python集合之set和frozenset的使用详解

Bena ·
更新时间:2024-09-20
· 241 次阅读

目录

简介

构造

基本使用

交集、并集、差集、对称差集

无交集、子集、超集

运算符

可用于 set 的操作

简介

集合对象 set 是由具有唯一性的可哈希对象组成的无序多项集,如 list 不能哈希因此,不能作为 set 的一项。

set 的常见用途包括成员检测、从序列中去除重复项以及数学中的集合类计算,如交集、并集、差集与对称差集等。

set 不记录元素位置或插入顺序。 相应地,set 不支持索引、切片或其他序列操作。

目前有两种内置集合类型,set 和 frozenset:

set 是可变的,其内容可以通过 add() 和 remove() 来改变。由于是可变类型,所以不可哈希值,则不能作为字典的键或其他集合的元素。

frozenset 是不可变的,所以可哈希,因此可以用为字典的键或其他集合的元素。

除了可以使用 set 构造器,非空的 set (不是 frozenset) 还可以通过将以逗号分隔的元素列表包含于花括号之内来创建,例如: {‘jack’, ‘sjoerd’}。

构造

花括号内用逗号分隔

集合推导式

类型构造器

a = {1, 2, 3} # 花括号内用逗号分隔 b = {i for i in range(4) if i > 0} # 集合推导式 c = set([1, 2, 3]) # 类型构造器 print(a, type(a)) print(b, type(b)) print(c, type(c)) # {1, 2, 3} <class 'set'> # {1, 2, 3} <class 'set'> # {1, 2, 3} <class 'set'> 基本使用 a = {1, 2, 3} print(len(a)) # 元素数量 print(1 in a) # 检测成员 print(1 not in a) # 检测成员 # 3 # True # False 交集、并集、差集、对称差集

A = {1, 2, 3} B = {3, 4, 5} print(A.intersection(B)) # 交集 print(A.union(B)) # 并集 print(A.difference(B)) # 差集 print(A.symmetric_difference(B)) # 对称差集 # {3} # {1, 2, 3, 4, 5} # {1, 2} # {1, 2, 4, 5} 无交集、子集、超集

与other无交集:isdisjoint(other)

是other的子集:issubset(other),相当于 set <= other

是other的超集:issuperset(other),相当于 set >= other

A = {1, 2, 3} B = {3, 4, 5} C = {1, 2, 3, 4, 5, 6} D = {7, 8, 9} # 是否无交集 print(A.isdisjoint(A)) # False print(A.isdisjoint(B)) # False print(A.isdisjoint(C)) # False print(A.isdisjoint(D)) # True print() # 是否子集 print(A.issubset(A)) # True print(A.issubset(B)) # False print(A.issubset(C)) # True print(A.issubset(D)) # False print() # 是否超集 print(C.issuperset(A)) # True print(C.issuperset(B)) # True print(C.issuperset(C)) # True print(C.issuperset(D)) # False 运算符

A、B、C 是 C 的子集,C 是 A、B、C 的超集

A、B 是 C 的真子集,C 是 A、B 的真超集

运算符含义
<=子集
<真子集
>=超集
>真超集
&交集
|并集
-差集
^对称差集
A = {1, 2, 3} B = {3, 4, 5} C = {1, 2, 3, 4, 5, 6} D = {7, 8, 9} # 子集,相当于issubset(other) print(A <= C) # True print(B <= C) # True print(C <= C) # True print(D <= C) # False print() # 真子集 print(A < C) # True print(B < C) # True print(C < C) # False print(D < C) # False print() # 超集,相当于issuperset(other) print(C >= A) # True print(C >= B) # True print(C >= C) # True print(C >= D) # False print() # 真超集 print(C > A) # True print(C > B) # True print(C > C) # False print(C > D) # False print() # 交集,相当于intersection(*other) print(A & B) # {3} print(A.intersection(B)) # {3} # 并集,相当于union(*other) print(A | B) # {1, 2, 3, 4, 5} print(A.union(B)) # {1, 2, 3, 4, 5} # 差集,相当于difference(*other) print(A - B) # {1, 2} print(A.difference(B)) # {1, 2} # 对称差集,相当于symmetric_difference(other) print(A ^ B) # {1, 2, 4, 5} print(A.symmetric_difference(B)) # {1, 2, 4, 5} 可用于 set 的操作

不可用于不可变的 frozenset

操作含义
add(elem)添加单个元素
remove(elem)移除单个元素,如果不存在报错
discard(elem)移除单个元素,如果存在
pop()移除并返回任一元素,集合为空报错
clear()移除所有元素
update(*others)
set |= other
添加元素
difference_update(*others)
set -= other
移除元素
symmetric_difference_update(other)
set ^= other
移除相同元素
A = {1, 2, 3} A.add(4) # 添加单个元素 print(A) # {1, 2, 3, 4} A = {1, 2, 3} A.remove(3) # 移除单个元素,如果不存在报错 print(A) # {1, 2} A = {1, 2, 3} A.discard(3) # 移除单个元素,如果存在 A.discard(99) # 移除单个元素,如果存在 print(A) # {1, 2} A = {2, 1, 3} print(A.pop()) # 移除并返回任一元素,集合为空报错 A = {1, 2, 3} A.clear() # 移除所有元素 print(A) # set() A = {1, 2, 3} B = {3, 4, 5} A.update(B) # 添加元素 # A |= B # 添加元素 print(A) # {1, 2, 3, 4, 5} A = {1, 2, 3} B = {3, 4, 5} A.difference_update(B) # 移除元素 # A -= B # 移除元素 print(A) # {1, 2} A = {1, 2, 3} B = {3, 4, 5} A.symmetric_difference_update(B) # 移除相同元素 # A ^= B # 移除相同元素 print(A) # {1, 2, 4, 5}

以上就是Python集合之set和frozenset的使用详解的详细内容,更多关于Python集合set frozenset的资料请关注软件开发网其它相关文章!



python集合 set Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号