python学习_8——集合set与固定集合frozenset

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WCanGER/article/details/83245556

1 集合 set

1)集合介绍

集合时可变的容器
集合内的数据对象是唯一的,不能重复多次
集合是无序的存储结构,集合中的数据没有先后关系
集合内的元素必须是不可变的对象
集合是可迭代的,可以使用for语句遍历
集合是相当于只要键没有值的字典,键则是集合的数据

2)集合的创建

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 } 

集合推导式的嵌套等同于列表推导式的嵌套

3)集合的运算:

交集	&
并集	|
补集	-
对称补集^
子集	<
超集	>

示例:

>>> 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)

4)python3中常用的集合方法:

方法 作用
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

2 固定集合 frozenset

1)介绍

可变的对象对应的不可变的对象
list ==> tuple
set ==> frozenset
固定集合是不可变的,无序的,含有唯一元素的集合(可以看成一个不可以改变的集合)

作用:
固定集合可以作为字典的键,还可以作为集合的值

d = { frozenset({1,2,3}):"123" }

2)固定集合 frozenset的创建

固定集合的构造函数 frozenset()
frozense() 创建一个空的固定集合
frozenset(iterable) 用可迭代对象创建一个新的固定集合
示例:

fz = frozenset()
fz = frozenset("hello")
fz = frozenset([1,2,3,4,5])

3)固定集合的运算:

交集 & ,并集 |,补集 -,对称补集 ^
in ,not in运算
is , is not运算
<,<=,>,>= ==,!=
(以上的运算符用法都等同于set中该运算符的用法)

固定集合的方法,相当于集合的全部方法去掉修改集合的方法

下一篇:python学习_9——函数function介绍与基础

猜你喜欢

转载自blog.csdn.net/WCanGER/article/details/83245556