Python教学课程分享6-集合
6.1 集合创建与使用
6.1.1 集合的创建与删除
集合是无序可变序列,它使用一对大括号({})作为界定符,元素之间使用逗号隔开,同一个集合内的每个元素都是唯一的,元素之间不允许重复。在集合中,只能包含数字、字符串、元组等不可变类型的数据,不可以包含列表、字典、集合等可变类型的数据。Python提供了一个内置函数hash()函数来计算对象的哈希值,凡是无法计算哈希值(调用hash()函数时抛出异常)的对象都不能作为集合的元素存在,也不能作为字典对象的键进行使用。
在Python中,直接将集合赋值给变量即可创建一个集合对象。或者也可以使用set函数将列表、元组等其他可迭代对象转换为集合,如果原来的数据中存在着重复元素,则在转换为集合的时候只保留一个。这两种方式的使用方式示例如下:
>>> Kee = {3,5} #直接将集合赋值给变量
>>> print(Kee)
{3,5}
>>> kee = set([0,1,2,3,4,5,6,6,6,7,8,9]) #使用set()函数,转换时自动去除重复元素
>>> print(kee)
{0,1,2,3,4,5,6,7,8,9}
当不再使用某个集合时,可以使用del命令来删除整个集合,接上面的代码,如果想要删除整个集合Kee,可以直接输入以下指令:
l del Kee
6.1.2 元素插入与删除
使用集合对象的add()方法可以为一个集合增加新元素,如果该元素已经在集合中存在了则忽略该操作;使用update()方法可以合并另外一个集合中的元素到当前集合中。使用方法示例如下:
>>> Kee = {1,2,3}
>>> Kee.add(3) #添加元素3,因为3已经在Kee集合中存在,所以忽略此操作
>>> print(Kee)
{1,2,3}
>>> Kee.update({3,4}) #将{3,4}这个集合中的元素添加到Kee集合中,并忽略重复的元素3
>>> print(Kee)
{1,2,3,4}
集合对象的pop()方法用于随机删除并返回集合中的一个元素,如果集合为空则抛出异常;remove()方法用于删除集合中的元素,如果指定元素不存在则抛出异常;disscard()函数用于从集合中删除一个特定元素,如果元素不在集合中则忽略掉该操作,不会抛出异常;clear()函数清空集合删除集合中所有元素。这几种删除集合中元素的方法的指令格式示例如下:
>>> Kee = {1,2,3,4,5,6,7,8,9}
>>> Kee.pop() #使用pop()函数随机删除Kee集合中的某个元素
>>> print(Kee)
{1,2,3,4,5,6,7,8}
>>> Kee.remove(2) #使用remove()函数删除指定元素2
>>> print(Kee)
{1,3,4,5,6,7,8}
>>> Kee.disscard(1) #使用disscard()函数删除指定元素1
>>> print(Kee)
{3,4,5,6,7,8}
>>> Kee.clear() #使用clear()函数清空Kee集合中的所有值
>>> print(Kee)
{}
除此之外,还有显示集合的长度和测试操作。显示集合长度的函数为len(),但需要注意的是,len()函数在显示集合长度时,并不显示重复元素的个数;如果想要测试某个元素是否是集合的成员,就要用到in来测试了,基本用法为:
l ‘某个元素’in 某个集合
6.2 集合常用运算
集合的种类包括列表,集,多重集,树和图。枚举类型可以是列表或集。集合最好的应用是去重复,这个可以根据它的数学含义来理解,而在Python语言中,集合专指可变集合(set())和不可变集合(frozenset)两种,而比较常用的就是set集合了。set和其他语言类似,是一个无序不重复元素集,基本功能包括关系测试和消除重复元素。集合对象还支持union(联合),intersection(交),difference(差)和sysmmetric difference(对称差集)等数学运算。以集合s和集合t为例,集合的方法有以下几种:
l s.issubset(t):测试是否s中的每一个元素都在t中;
l s.issuperset(t):测试是否t中的每一个元素都在s中;
l s.union(t):返回一个新的set包含s和t中的每一个元素;
l s.difference(t):返回一个新的set包含s中有但是t中没有的元素;
l s.intersection(t):返回一个新的set包含s和t中的公共元素;
l s.symmetric_difference(t):返回一个新的set包含s和t中不重复的元素。
issubset()方法,用于测试是否s集合中的每一个元素都在t集合中。如果t中的所有元素不是都在s中,则返回结果False。它的应用方法为:
l s.issubset(t)
union()方法用于返回一个新的set包含s和t中的所有元素。基本用法为:
l s.union(t)
intersection()方法返回一个新的set包含s和t中的公共元素。例如s集合中包括{a,b,c,0},t中包括了{1,2,3,0},使用此方法后,会返回这两个集合的公共元素{0}。它的基本用法如下:
l s.intersection(t)
返回不重叠元素的命令是symmetric_difference()方法,它用于返回一个新的set集合,这个集合包含s中有但是t中没有的元素,还是以s和t为例,对s和t使用此命令后,就会返回一个新的set集合{a,b,c,1,2,3}.它的基本用法如下:
l s.symmetric_difference(t)
如果想仅返回s集合中存在而t集合中不存在的元素,就需要用到命令difference()方法,此指令仅用于返回一个新的set包含s中有但是t中没有的元素。如果对s集合和t集合使用,它即返回集合{a,b,c}。它的使用方法如下:
l s.difference(t)