Python—集合类型之集合

集合类型

集合支持成员关系操作符(in)、对象大小计算操作符(len()),支持比较,也支持逻辑操作符

Python提供了两种内置的集合类型:可变的set类型,固定的frozenset类型

只有可哈希运算的对象可以添加到集合中,所有内置的固定数据类型(比如float、frozenset、int、str、tuple)都是可哈希运算的,内置的可变数据类型(比如dict、list、set)都不是可哈希运算的

注意:比较操作符==与!=比较方式是逐项比较,其他比较操作符则进行子集比较或超集比较

集合

集合是0个或多个对象引用的无序组合,对象引用所引用的对象都是可哈希运算的

集合石可变的,可以添加或移除数据项,由于其中的项是无序的,不能分片或按布距分片

函数

set()    #不带参数时将返回一个空集合

注意:非空集合可以不使用set()函数创建,空集合必须使用set()创建,而不能使用空的圆括号来创建 

集合中的每个数据项都是独一无二的,添加重复的数据项固然不会引发问题,但毫无意义,如:set("apple")、set("aple")、{'e', 'p', 'a', 'l'}

集合常用于删除重复的数据项,如:x = list(set(x)),x中的每个字符串都是独一无二的,其存放顺序也是任意的

集合方法与操作符

s.add(x)   #将数据项x添加到集合s中——如果s中尚未包含x
s.clear()  #移除集合s中的所有数据项
s.copy()   #返回集合s的浅拷贝
s.difference(t) s - t  #返回一个其中包含在s中但不在集合t中的所有数据项的集合
s.difference_update(t) s -= t  #移除每一个在集合t但不在集合s中的项
s.discard(x)  #如果数据项x存在于集合s中,就移除该数据项,跟set.remove()相同
s.intersection(t) s & t  #返回一个其中包含所有同时包含在集合t与s中的数据项的集合
s.intersection_update(t) s &= t  #使得集合s包含自身与集合t的交集
s.isdisjoint(t)  #如果集合s与t没有相同的项,就返回True
s.issubset(t) s <= t  #如果集合s与集合t相同,或者是t的子集,就返回True。使用s < t可以测试s是否是t的真子集
s.issuperset(t) s >= t  #如果集合s与集合t相同,或者是t的超集,就返回True。使用s > t可以测试s是否是t的真子集
s.pop()  #返回并移除集合s中一个随机项,如果s为空寂,就产生KeyError异常
s.remove(x)  #从集合s中移除数据项x,如果s中不包含x,就产生KeyError异常,跟set.discard()相同
s.symmetric_difference(t) s ^ t  #返回一个其中包含s与t中的每个数据项,但不包含同时子啊这两个集合中的数据项的集合
s.symmetric_difference_update(t) s ^= t  #使得集合s只包含其自身与集合t的对称差
s.union(t) s | t  #返回一个其中包含集合s中的所有数据项以及在t中而不在s中的数据项的集合
s.update(t) s |= t  #将集合t中每个s中不包含的数据项添加到集合s中
set("pecan") | set("pie") == {'p', 'e', 'c', 'a', 'n', 'i'}
set("pecan") & set("pie") == {'p', 'e'}
set("pecan") - set("pie") == {'c', 'a', 'n'}
set("pecan") ^ set("pie") == {'c', 'a', 'n', 'i'}

集合内涵

语法

{expression for item in iterable}
{expression for item in iterable if condition}
>>>html = {x for x in files if x.lower().endswith((".htm", ".html"))}

固定集合

固定集合是一旦创建后就不能改变的集合

固定集合只能使用frozenset数据类型函数进行创建,不带参数调用时,frozenset()将返回一个空的固定集合,带参数时,将返回该参数的浅拷贝。该函数只接受一个函数

方法

frozenset.copy()
frozenset.difference(t) s - t
frozenset.intersection(t) s & t
frozenset,isdisjoint(t)
frozenset.issubset(t) s <= t
frozenset.issuperset(t) s >= t
frozenset.symmetric_difference(t) s ^ t
frozenset.union(t) s | t

如果将二元运算符应用于集合与固定集合,那么产生结果的数据类型与左边操作数的数据类型一致

f是一个固定集合,s是一个集合,那么f & s将产生一个固定集合,s & f则产生一个集合

使用==与!=等操作符时,操作数的顺序无关紧要,如果两个集合包含相同的项,那么f == s结果为True

集合与固定集合都可以包含固定集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值