Python网络爬虫技术与实战
上QQ阅读APP看书,第一时间看更新

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}