集合(set)

4.6 集合(set)

集合是由不重复元素组成的无序容器。集合中的元素不能重复,即使向集合中再添加同样的元素,也只会保留一个。由于集合的这种特性,所以一般可以用集合进行去重。
集合中不能添加可变对象(不可哈希),因为无法判断两个可变对象是否相同,也就无法保证集合的内部不会有重复元素。
集合中的元素是无序的,我们通过print可以显示集合内的元素,但是显示的结果并非是集合中的元素的顺序。这意味着集合不能通过索引或切片获取内部的元素。

成都创新互联是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:成都网站制作、网站建设、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。

4.6.1 集合的创建

4.6.1.1 通过集合标识符号创建

列表在创建的时候用{}做标识。内部的元素用逗号进行分隔。
>>> st = {1} # 仅一个元素的集合
>>> st2 = {'a', 'b', 'c'} # 集合中存放的全是字符
>>> st3 = {1, 'a', '中'} # 集合中存放混合数据
>>> st4 = {'red', 'green', 'blue'} # 集合中存放的全是字符串

4.6.1.2 通过集合推导式创建

>>> {x for x in range(5)}

{0, 1, 2, 3, 4}

>>> {x * x for x in range(10)}

{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

>>> {x*x for x in range(10) if x % 3 == 0}

{0, 9, 36, 81}

4.6.1.3 通过set函数创建

set函数可以将一个可迭代对象转换成集合。如果可迭代对象中有重复的元素则会自动去除保留一个。
>>> print(set('Pythonn')) # 只会保留一个n

{'P', 'y', 't', 'h', 'o', 'n'}
>>> set() # 创建空的集合
{}

注意:不能通过st = {}创建空集合,因为这样会创建空的字典。

4.6.1.4 通过frozenset函数创建

set函数可以创建一个普通的集合(可以修改),但是通过frozenset函数创建的集合是一个不可修改的集合,创建后就不能再修改里面的元素,包括增加、删除、清空等。
>>> st = frozenset('python')
>>> st

frozenset({'o', 't', 'p', 'h', 'y', 'n'})

>>> st.add('l')

Traceback (most recent call last):
File "C:\Program Files\Python3102\lib\code.py", line 90, in runcode
exec(code, self.locals)
File "", line 1, in
AttributeError: 'frozenset' object has no attribute 'add'

4.6.2 集合的访问

4.6.2.1 遍历集合

参见可迭代对象章节中的可迭代对象的遍历

4.6.2.2 成员资格检查

参见可迭代对象中的成员资格检查

4.6.3 集合的运算

4.6.3.1 并集(返回两个集合所有的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 | st2

{1, 2, 3, 4, 5, 6, 8, 10}

4.6.3.2 交集(返回两个集合都有的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 & st2

{2, 4}

4.6.3.3 差集(返回前者集合有而后者没有的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 - st2

{1, 3, 5}

4.6.3.4 对称差(返回不同时在2个集合中的元素的集合)

>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1 - st2

{1, 3, 5, 6, 8, 10}

4.6.4 集合的关系

A < B # 返回A是否是B的子集(同:A.issubset(B))
A > B # 返回A是否是B的超集(同:A.issuperset(B))

4.6.5 集合的方法

4.6.5.1 添加元素

4.6.5.1.1 add(x)

描述
为集合添加元素
示例
>>> st = {1, 2}
>>> st.add(3)
>>> st

{1, 2, 3}

4.6.5.1.2 update(x)

描述
添加新的元素或集合到当前集合中。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.update(st2)
>>> st1

{1, 2, 3, 4, 5, 6, 8, 10}

4.6.5.2 删除元素

4.6.5.2.1 remove(x)

描述
指定删除集合中的元素。要删除的元素必须在目标集合中存在,否则引发KeyError异常。
示例
>>> st1 = {1, 2, 3}
>>> st1.remove(2)
>>> st1

{1, 3}

4.6.5.2.2 discard()

描述
删除集合中指定的元素。如果要删除的元素不在目标集合中则不起任何作用。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st1.discard(2)
>>> st1

{1, 3, 4, 5}

4.6.5.2.3 pop()

描述
随机删除集合中的一个元素
示例
>>> st1 = {1, 2, 3}
>>> st1.pop()

1

>>> st1

{2, 3}

4.6.5.2.4 clear()

描述
移除集合中的所有元素
示例
>>> st = {1, 2}
>>> st.clear()
>>> st

{}

4.6.5.3 查询统计类

4.6.5.3.1 union(x)

描述
返回两个集合的并集。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.union(st2)

{1, 2, 3, 4, 5, 6, 8, 10}

4.6.5.3.2 intersection()、intersection_update()

描述
返回多个集合的交集。intersection不修改原对象内容,直接返回结果,而intersection_update会修改原对象内容。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.intersection(st2)

{2, 4}

4.6.5.3.3 difference()、difference_update()

描述
返回多个集合的差集。difference不修改原对象内容,直接返回结果,而difference_update会修改原对象内容。
示例
>>> st1 = {1, 2, 3}
>>> st2 = {2, 4, 6}
>>> st1.difference(st2)

{1, 3}

4.6.5.3.4 symmetric_difference()、symmetric_difference_update()

描述
返回两个集合中不重复的元素的集合(对称差)。symmetric_difference不修改原对象内容,直接返回结果,而symmetric_difference_update会修改原对象内容。
示例
>>> st1 = {1, 2, 3, 4, 5}
>>> st2 = {2, 4, 6, 8, 10}
>>> st1.symmetric_difference(st2)

{1, 3, 5, 6, 8, 10}

4.6.5.3.5 issubset()、issuperset()

描述
判断前者集合是否是后者集合的子集(超集),如果为真,则返回True,否则返回False。
示例
>>> st1 = {1, 2}
>>> st2 = {1, 2, 4}
>>> st1.issubset(st2)

True

4.6.5.3.6 isdisjoint()

描述
判断两个集合是否不相交(即不含有相同元素),如果不相交则返回True,否则返回False。
示例
>>> st1 = {1, 2}
>>> st2 = {2, 4}
>>> st3 = {3, 6}
>>> st1.isdisjoint(st2)
>>> st1.isdisjoint(st3)

False
True

4.6.5.4 其它类

4.6.5.4.1 copy()

描述
拷贝一个集合
示例
>>> st = {1, 2, 3}
>>> st2 = st.copy()
>>> st2

{1, 2, 3}


本文题目:集合(set)
当前链接:http://azwzsj.com/article/dsogish.html