数据类型-集合
集合
也是python的容器类型之一,已{}
包裹,元素之间用 ,
分隔,集合最大的特点就是,容器类的元素不重复
,集合里的元素是无序的
, 它的基本用法包括成员检测
和消除重复元素
。集合对象也支持像 联合
,交集
,差集
,对称差分
等数学运算
1.特点
-
集合里的元素是不重复的
: 一般多用于列表去重 -
集合里的元素是无序的
: 一般不用于靠索引取值 创建空集合不能使用{},要使用 set() 函数
示例
s1 = {10, 20, 30, 40, 50}
print(s1)
# 结果: {40, 10, 50, 20, 30}
s2 = {10, 30, 20, 10, 30, 40, 30, 50}
print(s2)
# 结果: {40, 10, 50, 20, 30}
s3 = set('abcdefg')
print(s3)
# 结果: {'d', 'f', 'b', 'e', 'g', 'c', 'a'}
s4 = set()
print(type(s4))
# 结果: <class 'set'>
s5 = {}
print(type(s5))
# 结果: <class 'dict'>
2. 集合常见操作
2.1 增加数据
-
add()
: 增加数据至集合中
s1 = {10, 20}
s1.add(100)
s1.add(10)
print(s1)
# 结果: {100, 10, 20}
因为集合有去重功能
,所以,当向集合内追加的数据是当前集合已有数据的话,则不进行任何操作
。
-
update()
:, 追加的数据是序列
s1 = {10, 20}
# s1.update(100)
# 报错
# 报错信息:TypeError: 'int' object is not iterable
s1.update([100, 200])
s1.update('abc')
print(s1)
# 结果: {100, 200, 10, 'a', 20, 'c', 'b'}
2.2 删除数据
-
remove()
: 删除集合中的指定数据
,如果数据不存在则报错
。
s1 = {10, 20}
s1.remove(10)
print(s1)
# {20}
s1.remove(10)
# 报错
# 结果: KeyError print(s1)
-
discard()
: 删除集合中的指定数据
,如果数据不存在也不会报错
。
s1 = {10, 20}
s1.discard(10)
print(s1)
# 结果:{20}
s1.discard(10)
print(s1)
# 结果: {20}
-
pop()
: 随机删除集合中的某个数据
,并返回这个数据。
s1 = {10, 20, 30, 40, 50}
del_num = s1.pop()
print(del_num)
# 结果: 40
print(s1)
# {10, 50, 20, 30}
2.3 判断
-
in 与 not in
: 判断元素是否存在集合中,存在返回True
, 不存在返回False
s1 = {10, 20, 30, 40, 50}
print(10 in s1)
# 结果:True
print(10 not in s1)
# 结果:False
3 集合的数学运算
-
union()
:也可以用符号|
表示,并集
两个集合的联合
是一个新集合
,该集合中的每个元素都至少是其中一个集合的成员,即属于两个集合其中之一的成员
s1 = {10, 20, 30, 40, 50}
s2 = {100, 20, 50, 60, 80}
print(s1.union(s2))
print(set(s1 | s2))
# 结果:{100, 40, 10, 80, 50, 20, 60, 30}
# 结果:{100, 40, 10, 80, 50, 20, 60, 30}
-
intersection()
: 也可以用符号&
表示,交集
可以把交集操作比做集合的AND(或合取)操作
。两个集合的交集是一个新集合,该集合中的每个元素同时是两个集合中的成员
,即属于两个集合的成员
s1 = {10, 20, 30, 40, 50}
s2 = {100, 20, 50, 60, 80}
print(s1.intersection(s2))
print(set(s1 & s2))
# 结果: {50, 20}
# 结果: {50, 20}
-
difference()
: 也可以用符号-
表示,差集
两个集合(s
和t
)的差补或相对补集是指一个集合c
,该集合中的元素,只属于集合 s,而不属于集合 t, 使用时请注意先后顺序
s1 = {10, 20, 30, 40, 50}
s2 = {100, 20, 50, 60, 80}
print(s1.difference(s2))
print(set(s1 - s2))
# {40, 10, 30}
# {40, 10, 30}
print(s2.difference(s1))
print(set(s2 - s1))
# {80, 100, 60}
# {80, 100, 60}
-
symmetric_difference()
,也可以用符号^
表示,异或
两个集合(s
和t
)的对称差分是指另外一个集合c
,该集合中的元素,只能是属于集合 s
或者集合t的成员
,不能同时属于两个集合
。
s1 = {10, 20, 30, 40, 50}
s2 = {100, 20, 50, 60, 80}
print(s1.symmetric_difference(s2))
print(set(s1 ^ s2))
# {80, 100, 40, 10, 60, 30}
# {80, 100, 40, 10, 60, 30}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。