Python中的集合同数学中的集合概念类似,也是用于保存不重复元素的,有可变集合(set)和不可变集合(frozen set)两种。本节所要介绍的可变集合是无序可变序列,而不可变集合在本书中不做介绍。在形式上,集合的所有元素都放在一对“{}”中,两个相邻元素间使用“,”分隔。
在数学中,集合的定义是把一些能够确定的不同的对象看成一个整体,而这个整体就是由这些对象的全体构成的集合。集合通常用“{}”或者大写的拉丁字母表示。
集合最常用的操作就是创建集合,添加删除集合中的元素,以及集合的交集、并集和差集运算,下面分别进行介绍。
在Python中提供了两种创建集合的方法:一种是直接使用“{}”创建,另一种是通过set()函数将列表、元组等可迭代对象转换为集合。
在Python中,创建集合也可以像创建列表、元组和字典一样,直接将集合赋值给变量从而实现创建集合,即直接使用“{}”创建,语法格式如下:
setname={element1,element2,element3,…,elementn}
参数说明:
● setname:表示集合的名称,可以是任何符合Python命名规则的标识符。
● elemnet1,elemnet2,elemnet3,…,elemnetn:表示集合中的元素,元素个数没有限制,只要是Python支持的数据类型就可以。
在创建集合时,如果输入了重复的元素,Python会自动只保留一个。
【例3.47】分别使用不同类型的元素创建3个集合。
set1={'水瓶座',"射手座","双鱼座","双子座"} set2={3,1,4,1,5,9,2,6} set3={'Python',28,('人生苦短',"我用Python")}
这段代码将创建以下集合:
{'水瓶座',"射手座","双鱼座","双子座"} {3,4,1,5,9,2,6} {'Python',28,('人生苦短',"我用Python")}
由于Python中的集合是无序的,所以每次输出时元素的排列顺序可能都不相同。
在Python中,可以使用set()函数将列表、元组等其他可迭代对象转换为集合,其语法格式如下:
setname=set(iteration)
参数说明:
● setname:表示集合名称。
● iteration:表示要转换为集合的可迭代对象,可以是列表、元组、range对象等,也可以是字符串。如果是字符串,返回的集合将是包含全部不重复字符的集合。
在Python中,创建集合时推荐采用set()函数实现。
【例3.48】使用set函数创建集合。
>>>x = set('runoob') >>> y = set('google') >>> x, y (set(['b', 'r', 'u', 'o', 'n']), set(['e', 'o', 'g', 'l']))# 重复的被删除 >>> x & y # 交集 set(['o']) >>> x | y # 并集 set(['b', 'e', 'g', 'l', 'o', 'n', 'r', 'u']) >>> x - y # 差集 set(['r', 'b', 'u', 'n'])
集合是可变序列,所以在创建集合后,还可以添加或者删除元素。
向集合中添加元素可以使用add()方法实现,其语法格式如下:
setname.add(element)
参数说明:
● setname:表示要添加元素的集合。
● element:表示要添加的元素内容,只能使用字符串、数字及布尔类型的True或者False等,不能使用列表、元组等可选代对象。
【例3.49】向集合中添加元素。
fruits = {"apple", "banana", "cherry"} fruits.add("orange") print(fruits)
运行上面的代码,输出结果如下:
{'cherry', 'orange', 'apple', 'banana'}
在Python中,可以使用del命令删除整个集合,也可以使用集合的pop()方法或者remove()方法删除集合中的元素,或者使用集合对象的clear()方法清空集合,即删除集合中的全部元素,使其变为空集合。
【例3.50】从集合中删除元素。
a = [0,1,2,3,4] b = a[0] del a[0] # 删除列表a中的第0个元素0 print(a)
运行上面的代码,输出结果如下:
[1,2,3,4]
集合最常用的操作就是进行交集、并集、差集和对称差集运算。进行交集运算时使用“&”符号,进行并集运算时使用“|”符号,进行差集运算时使用“-”符号,进行对称差集运算时使用“^”符号。
下面我们分别使用代码示例介绍集合的交集、并集、差集和对称差集运算。
>>> x={1,2,3,4} >>> y={3,4,5,6} >>> x set([1, 2, 3, 4]) >>> y set([3, 4, 5, 6]) >>> x&y set([3, 4]) >>> x.intersection(y) set([3, 4])
>>> x | y # 集合并集 set([1, 2, 3, 4, 5, 6]) >>> x.union(y) set([1, 2, 3, 4, 5, 6])
>>> x-y # x与y的差集 set([1, 2]) >>> x.difference(y)# x与y的差集 set([1, 2]) >>> y-x # y与x的差集 set([5, 6]) >>> y.difference(x)# y与x的差集 set([5, 6])
>>> x^y set([1, 2, 5, 6]) >>> y^x set([1, 2, 5, 6]) >>> x.symmetric_difference(y) set([1, 2, 5, 6]) >>> y.symmetric_difference(x) set([1, 2, 5, 6])
在3.2~3.5节介绍了序列中的列表、元组、字典和集合的应用,下面通过表3.1对这几个数据序列进行比较。
表3.1 列表、元组、字典和集合的区别