集合与不可变集合
集合于不可变集合 |
一、集合
集合是一种无序的序列。集合中的元素具有唯一性,即集合中不存在两个同样的元素。
1.集合的格式
通常用一对大括号“{}”来创建集合:
s = {1,2,5}
也可以使用set()函数来生成:
s = set([1,3,2,1]) print(s) #结果为:{1,3,2}
2.集合的运算
(1)交集
两个集合的交集可以用操作符" & "实现,也可以用.intersection()方法得到两个集合的交集,返回两个集合共有元素的集合。
a = {1,5,6,9} b = {1,4,6,8} s = a.intersection(b) v = a & b print(s) #结果为:{1, 6} print(v) #结果为:{1, 6}
(2)并集
两个集合的并集可以用操作符" | "实现,也可以用.union()方法得到两个集合的并集,返回两个集合所有元素的集合
a = {1,5,6,9} b = {1,4,6,8} s = a.union(b) v = a | b print(s) #结果为:{1, 4, 5, 6, 8, 9} print(v) #结果为:{1, 4, 5, 6, 8, 9}
(3)差集
两个集合的差集可以用操作符" - "实现,也可以用.difference()方法得到两个集合的差集,返回在第一个集合而不在第二个集合的元素组成的集合。
a = {1,5,6,9} b = {1,4,6,8} s = a.difference(b) v = b - a print(s) #结果为:{5,9} print(v) #结果为:{4,8}
(4)交叉补集
两个集合的差集可以用操作符" ^ "实现,也可以用.symmetric_difference()方法得到两个集合的交叉补集,返回两个集合并集与交集的差。
a = {1,5,6,9} b = {1,4,6,8} s = a.symmetric_difference(b) v = b ^ a print(s) #结果为:{4, 5, 8, 9} print(v) #结果为:{4, 5, 8, 9}
3.集合的包含关系
(1)子集
判断子集关系可以用运算符" <= "实现,也可以用.issubset()方法来判断是不是某个集合的子集。
a = {1,5,6,9} b = {1,6} print(b<=a) #结果为:True print(b.issubset(a)) #结果为:True
(2)父集
判断父集关系可以用运算符" >= "实现,也可以用.issuperset()方法来判断是不是某个集合的父集。
a = {1,5,6,9} b = {1,6} print(a>=b) #结果为:True print(a.issuperset(b)) #结果为:True
4.集合的方法
(1).add()方法
.add()方法就是添加单个元素。
b = {1,6} b.add(5) print(b) #结果为:{1,5,6}
(2).update()方法
.update()方法用来向集合添加多个元素,接受一个序列作为参数。
b = {1,6} b.update([1,5,7]) print(b) #结果为:{1, 5, 6, 7}
(3).remove()方法
.remove()方法可以从集合中移除单个指定元素,元素不存在会报错。
b = {1,6,5} b.remove(5) print(b) #结果为:{1,6}
(4).pop方法
.pop方法随机地从集合中删除并返回一个元素。
b = {1,6,5,'alex'} v = b.pop() print(b) #返回删除元素的集合 print(v) #随机被删除的元素
(5).discard()方法
.discard()方法作用跟.remove()方法一样,区别在于删除不存在元素不会报错。
b = {1,6,5,'alex'} b.discard(3) print(b) #结果为:{1, 'alex', 5, 6}
5.判断从属关系
b = {1,6,5,'alex'} s = 5 in b print(s) #结果为:True
二、不可变集合
不可变集合是一种不可变类型,一旦创建就不能改变,其构建方法如下:
s = frozenset([1,6,'alex',1]) print(s) #结果为:frozenset({1, 'alex', 6})
PS:以上代码得到的结果集合是可变的,不是唯一值。