集合时可变的容器
集合内的数据对象是唯一的,不能重复多次
集合是无序的存储结构,集合中的数据没有先后关系
集合内的元素必须是不可变的对象
集合是可迭代的,可以使用for语句遍历
集合是相当于只要键没有值的字典,键则是集合的数据
1.创建集合的构造函数:
set() 创建一个空集合对象的唯一方式(不能使用{}来创建空集合)
set(iterable)用可迭代对象来创建新的集合
示例:
s = set() #s绑定一个空集合
s = set(range(1,5)) #s = {1,2,3,4}
s = set("hello") #s = {'h', 'o', 'e', 'l'},去重了
注:非空集合用{}括起来,内部各个元素用逗号“,”分割开
2.字面值方式来创建非空集合:
s = {1,2,3,4,5,1,3} #s = {1, 2, 3, 4, 5},去重
#不可以使用s = {},此时创建的不是一个集合set,而是一个字典
s = set({1:"1",2:"2",3:"3"}) #s = {1, 2, 3}
#由于字典本身为一个可迭代对象,对其进行迭代时,字典提供他的键出来
s = set([1,32.3,'ad']) #s = {32.3, 1, 'ad'}
s = {1,2,'s',(1,2)} #s = {1,2,'s',(1,2)}
s = {1,2,'s',[1,2]} #error ,[1,2]是一个可变对象
3.集合推导式
集合推导式是用可迭代对象创建集合的表达式
语法:
{ 表达式 for 变量 in 可迭代对象 [ if 真值表达式] }
注:[]代表其中内容可以省略
如果运算结果中有重复元素,会自动去重
示例:
s = { x**2 for x in range(6) if x > 3}
#s = { 16, 25 }
集合推导式的嵌套等同于列表推导式的嵌套
交集 &
并集 |
补集 -
对称补集^
子集 <
超集 >
示例:
>>> s = {1,2,3}
>>> s1 = {1,4,5}
&:生成两个集合的交集
s&s1 = {1}
|:生成两个集合的并集
s|s1 = {1, 2, 3, 4, 5}
-:生成前一个集合对应于后一个集合的补集,即生成属于前一个集合但不属于后一个集合的元素组成的集合
s-s1 = {2, 3}
^:生成两个集合的对称补集,即去掉两个集合的公共元素后合并
s^s1 = {2, 3, 4, 5}
<:判断一个集合是另一个集合的子集
>:判断一个集合是另一个集合的超集
s2 = {1,2}
s2 < s #True
s > s2 #True
s2 < s1 #False
== != :判断集合相同或者不同
{1,2,3} == {3,2,1} #True
>=,<= :表示子集或者相当 与 超集或者相等
in , not in 运算符:
等同于列表的in,not in 运算符
3 in s #True
集合和字典的优点:
in ,not in 运算速度比较快
能用于集合的内建函数:
len(x),max(x),min(x),sum(x),any(x),all(x)
方法 | 作用 |
---|---|
S.add(e) | 在集合中添加一个新的元素e;如果元素已经存在,则不添加 |
S.remove(e) | 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误 |
S.discard(e) | 从集合S中移除一个元素e,在元素e不存在时什么都不做; |
S.clear() | 清空集合内的所有元素 |
S.copy() | 将集合进行一次浅拷贝 |
S.pop() | 从集合S中删除一个随机元素;如果此集合为空,则引发KeyError异常 |
S.update(s2) | 等同于 S l= s2, 用 S与s2得到的全集更新变量S |
S.difference(s2) | S - s2 补集运算,返回存在于在S中,但不在s2中的所有元素的集合 |
S.difference_update(s2) | 等同于 S -= s2 |
S.intersection(s2) | 等同于 S & s2 |
S.intersection_update(s2) | 等同于S &= s2 |
S.isdisjoint(s2) | 如果S与s2交集为空返回True,非空则返回False |
S.issubset(s2) | 如果S与s2交集为非空返回True,空则返回False |
S.issuperset(…) | 如果S为s2的子集返回True,否则返回False |
S.symmetric_difference(s2) | 返回对称补集, 等同于 S ^ s2 |
S.symmetric_difference_update(s2) | 等同于 S ^= s2, 用 S 与 s2 的对称补集更新 S |
S.union(s2) | 生成 S 与 s2的全集, 等同于 S |
可变的对象对应的不可变的对象
list ==> tuple
set ==> frozenset
固定集合是不可变的,无序的,含有唯一元素的集合(可以看成一个不可以改变的集合)
作用:
固定集合可以作为字典的键,还可以作为集合的值
d = { frozenset({1,2,3}):"123" }
固定集合的构造函数 frozenset()
frozense() 创建一个空的固定集合
frozenset(iterable) 用可迭代对象创建一个新的固定集合
示例:
fz = frozenset()
fz = frozenset("hello")
fz = frozenset([1,2,3,4,5])
交集 & ,并集 |,补集 -,对称补集 ^
in ,not in运算
is , is not运算
<,<=,>,>= ==,!=
(以上的运算符用法都等同于set中该运算符的用法)
固定集合的方法,相当于集合的全部方法去掉修改集合的方法