
1.5.3 集合
本节将介绍一个无序存储容器——集合。集合不同于列表,集合中的元素是不重复的,并且不按任何特定顺序放置。
集合有两种不同的类型,即可变集合(set)和不可变集合(frozenset)。可变集合可以添加和删除元素,不可变集合则不允许。本节介绍的可变集合是无序可变序列,关于集合最常用的操作是创建、添加、删除集合,以及交集和差集等运算。
1.创建集合
集合使用一对花括号{}作为定界符,元素之间使用逗号分隔,且集合中的元素不允许重复,集合中只能包含数字、字符串、元组和布尔变量等不可变类型的数据,而不能包含列表、字典、集合等可变类型的数据。
集合可以使用set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只保留一个。如果原序列或迭代对象中有不可散列的值,则无法转换成集合,且会抛出异常。
【例1-37】创建集合示例
>>> s1 = set() # 创建空集合 >>> s2 = {0,1,2} # 创建数值集合 >>> s3 = set(('a','b')) # 从元组创建集合 >>> s4 = set(range(6,18)) >>> s4 {6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17} >>> s5 = set([5,7,3,6,8,4,3,7]) >>> s5 {3, 4, 5, 6, 7, 8}
2.集合的添加和删除
集合是可变序列,所以在创建集合后,还可以对其进行添加或者删除元素的操作。
向集合中添加元素可以使用add()方法实现。要添加的元素内容,只能是字符串、数字及布尔类型的True和False等,不能是列表、元组等迭代对象。
【例1-38】使用add()方法向集合中添加元素
>>> s6 = {1.0,2.0} >>> s6.add(3.0) >>> s6 {1.0, 2.0, 3.0}
要删除集合中的元素,可以使用del命令删除整个集合,也可以使用集合的pop()方法或者remove()方法删除某一个元素,也可以使用集合对象的clear()方法清空集合,删除所有元素。三种删除集合或元素的方法的使用示例如下所示。
【例1-39】使用del命令、remove()方法和clear()方法删除集合或元素
>>> del s6 >>> s6 NameError: name 's6' is not defined >>> s6.remove(2.0) >>> s6 {1.0, 3.0} >>> s6.clear() >>> s6 set()
3.集合运算
Python提供了求并集“|”、交集“&”和差集“-”的运算方法。内置函数len()、max()、min()、sum()、sorted()、map()、filter()和enumerate()等也可以应用于集合。
【例1-40】集合运算方法示例
>>> a_set = set([1,2,3,4,6,9]) >>> b_set = {11,56,2,7,10} >>> a_set | b_set # 并集 {1, 2, 3, 4, 6, 7, 9, 10, 11, 56} >>> a_set & b_set # 交集 {2} >>> a_set - b_set # 差集 {1, 3, 4, 6, 9}