集合与不可变集合的关系和列表与元组之间的关系类似。
先总结一下集合
集合是一个无序的可变的序列。集合中的元素必须是可hash的,即不可变的数据类型。
空集合
a=set()
注意a={}创建的是一个空字典。
也可以用set()转化为集合
b=[1,2,3,4]
a=set(b)
a
{1,2,3,4}
还可以用{}来创建一个集合
a={1,2,3,4,1}
a
{1,2,3,4}
与字典一样,因为集合是无序的,所以当有重复元素时,只保留其中一个。
与数学中集合的定义类似,python中的集合也有交,并,差,包含等操作。
1.交 a.intersection(b) 或 a&b
返回a,b中的所有相同的元素组成的集合,且只保留一个.
a={1,2,3,4}
b={2,3,4,5}
a&b
{2,3,4}
2.并 a.union(b) 或 a|b
返回a,b中所有元素组成的集合,相同元素只保留一个。
a|b
{1,2,3,4,5}
3.差 a.difference(b) 或 a-b
返回只在a中而不在b中的元素组成的集合。
a-b
{1}
4.对称差 a.symmetric_difference(b) 或 a^b
返回a,b中所有不相同的元素组成的集合。
a^b
{1,5}
5.包含 b.issubset(a) 或 b<=a
判断b是不是a的子集,返回一个bool值。
真子集用<或>号判断。
改变集合的方法
6.添加元素 a.add()
向a中添加一个不可变的元素。size(a):=size(a)+1
a={1,2,3,4}
a.add(5)
a
{1,2,3,4,5}
7.批量添加元素 a.update(seq)
将seq中的与a中元素不同的元素全部添加到a中。seq可以是任意的序列。
a={1,2,3,4}
a.update((1,5,6))
a
{1,2,3,4,5,6}
8.批量删除元素 a.defference_update(seq)
去除a中所有与seq中相同的元素。
9.删除单一元素 a.remove() a.discard()
remove删除a中的一个元素,若不存在就报错。
discard删除a中的一个元素,若不存在不会报错。
10.随机删除并弹出一个元素 a.pop()
由于set没有顺序,不能像列表一样按照index删除弹出元素,因此pop随机删除并弹出一个元素。a为空集时会报错。
a={1,2,3,4,5}
a.pop()
1
再来总结一下不可变集合
不可变集合就是一个无序的不可变的集合
用frozenset(seq)创建
a=frozenset([1,2,3,(1,2,4)])
a
frozenset({1,2,3,(1,2,4)})
元素也只能是可hash的
frozenset([1,2,3,[1,2,4]])
error
主要用来做字典的键。。与tuple的区别在于无序,元素不可重复,且元素只能是不可变类型。