Python之set集合详解
Posted 蓝莓薄荷
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之set集合详解相关的知识,希望对你有一定的参考价值。
定义
set(集合)是Python中常见的一种数据类型。集合中的元素是无序和唯一的,它主要用于进行关系测试和消除重复元素。集合对象还支持union(联合),intersection(交集),difference(差集),sysmmetric difference(对称差集)等数学运算。
创建集合set
创建空集合
s = set() # 空集合
print(type(s)) # <class \'set\'>
s1 = {} # 空字典
print(type(s1)) # <class \'dict\'>
注意:想要创建空集合,你必须使用set()而不是{},后者用于创建空字典。
创建非空集合
s1 = {1, 2, 3}
print(s1)
s2 = set(\'HelloWorld\')
print(s2)
结果如下
{1, 2, 3}
{\'l\', \'o\', \'W\', \'H\', \'r\', \'d\', \'e\'}
常用的集合方法
s.add() - 向集合中添加元素
s = {\'a\', \'b\', \'c\'}
s.add(666)
print(s) # {\'b\', 666, \'c\', \'a\'}
s.remove() - 删除集合中的元素
s = {\'a\', \'b\', \'c\'}
s.remove(\'a\')
print(s) # {\'b\', \'c\'}
s.remove(\'d\') # 删除集合中不存在的元素会报KeyError错误
s.pop() - 删除并返回任意的集合元素(随机删除)
s = {\'a\', \'b\', \'c\'}
s.pop() # 删除时无序的随机删除
print(s) # {\'a\', \'b\'}
s.discard() - 删除集合中的元素
s = {\'a\', \'b\', \'c\'}
s.discard(\'a\')
s.discard(\'d\') # 如果元素不存在则不执行任何操作
print(s) # {\'c\', \'b\'}
s.clear() - 清空集合
s = {\'a\', \'b\', \'c\'}
s.clear()
print(s) # set()
s.copy() - 浅拷贝一个集合
s1 = {\'a\', \'b\', \'c\'} # 可变集合
s2 = frozenset(s1) # 不可变集合
s1_cp = s1.copy()
s2_cp = s2.copy()
print(s1, s1_cp, id(s1), id(s1_cp))
print(s2, s2_cp, id(s2), id(s2_cp))
结果如下
{\'c\', \'a\', \'b\'} {\'c\', \'a\', \'b\'} 2553599288040 2553852385768
frozenset({\'c\', \'a\', \'b\'}) frozenset({\'c\', \'a\', \'b\'}) 2553597533768 2553597533768
在python中,set属于可变类型,fronzenset则属于不可变类型。
可变对象的浅拷贝,整体地址不一样,但是内部元素都是同一个地址(你可以尝试遍历集合中的元素来查看元素的地址);
而不可变对象的浅拷贝,整体地址和内部元素都是同一个地址。
s1.issubset(s2) - 子集
子集,为某个集合中一部分的集合,故亦称部分集合。
使用操作符 <
执行子集操作,同样地,也可使用方法 issubset() 完成。
s1 = {\'a\', \'b\'}
s2 = {\'a\', \'b\', \'c\', \'d\'}
s3 = {\'a\', \'c\'}
print(s1.issubset(s2)) # True
print(s1 < s2) # True
print(s1 < s3) # False
s1.intersection(s2) - 交集
两个集合 A 和 B 的交集是含有所有既属于 A 又属于 B 的元素,而没有其他元素的集合。
使用 &
操作符执行交集操作,同样地,也可使用方法 intersection() 完成。
s1 = {\'a\', \'b\', \'c\'}
s2 = {\'a\', \'b\', \'d\'}
s3 = s1.intersection(s2)
s4 = s1 & s2 # 效果同上
print(s3) # {\'b\', \'a\'}
print(s4) # {\'b\', \'a\'}
s1.union(s2) - 并集
一组集合的并集是这些集合的所有元素构成的集合,而不包含其他元素。
使用操作符 |
执行并集操作,同样地,也可使用方法 union() 完成。
s1 = {\'a\', \'b\', \'c\'}
s2 = {\'a\', \'b\', \'d\'}
s3 = s1.union(s2)
s4 = s1 | s2 # 效果同上
print(s3) # {\'a\', \'b\', \'d\', \'c\'}
print(s4) # {\'a\', \'b\', \'d\', \'c\'}
s1.difference(s2) - 差集
A 与 B 的差集是所有属于 A 且不属于 B 的元素构成的集合。
使用操作符 -
执行差集操作,同样地,也可使用方法 difference() 完成。
s1 = {\'a\', \'b\', \'c\'}
s2 = {\'a\', \'b\', \'d\'}
s3 = s1.difference(s2)
s4 = s1 - s2 # 效果同上
print(s3) # {\'c\'}
print(s4) # {\'c\'}
s1.symmetric_difference(s2) - 对称差
两个集合的对称差是只属于其中一个集合,而不属于另一个集合的元素组成的集合。
使用 ^
操作符执行差集操作,同样地,也可使用方法 symmetric_difference() 完成。
s1 = {\'a\', \'b\', \'c\', \'d\'}
s2 = {\'a\', \'b\', \'e\', \'f\'}
s3 = s1.symmetric_difference(s2)
s4 = s1 ^ s2
print(s3) # {\'c\', \'e\', \'f\', \'d\'}
print(s4) # {\'c\', \'e\', \'f\', \'d\'}
s.update() - 更新集合
s = {\'a\', \'b\', \'c\'}
s.update(\'d\')
print(s) # {\'b\', \'a\', \'c\', \'d\'}
s.update({\'e\', \'f\'})
print(s) # {\'a\', \'f\', \'d\', \'e\', \'b\', \'c\'}
s.update([\'g\', \'h\'])
print(s) # {\'h\', \'a\', \'f\', \'d\', \'e\', \'g\', \'b\', \'c\'}
以上是关于Python之set集合详解的主要内容,如果未能解决你的问题,请参考以下文章