Python 的集合(set)类型

发表时间

本文简单介绍了Python语言里set类型自带的方法,set类型表示元素和集合的从属关系(membership),和列表等序列相比,最大的特点是无序。可以跟数学里的集合概念完全对应起来。


概念

数学里的集合概念,在Python语言里对应的是set类型。与list,tuple不同的地方是,set更加强调的是一种“从属关系”(membership),跟顺序无关,所以有重复的元素会先排除。

>>> set([1, 1, 1, 1, 2, 3])
set([1, 2, 3])  #重复元素被排除
>>> set([3, 2, 1])
set([1, 2, 3])  #无序的集合
>>>

set类型的创建

花括号用来创建set类型的变量,这与字典很类似,只是缺少了value,后面会逐渐发现,set类型和字典的key有一些类似之处,比如:无序、不可重复、必须是hashable的,所以用花括号表示,是理所当然的。

set类型还有一种标准的表示法是 set([…]) ,例如

>>> {'a','b'}
set(['a', 'b'])
>>> 

set添加元素

set类型有内置函数add用来给set添加元素

>>> A = {'a','b'}
>>> A.add('c')
>>> A
set(['a', 'c', 'b'])
>>>

set更新元素

set类型有四个内置update函数用来给set添加元素,对应于Python 的集合运算中的4种运算

并集更新

与add类似,只是添加的不是单个元素,而且另一个集合,这和字典的update函数功能非常相似。最后的结果是两个集合的并集

>>> A = {'a','b'}
>>> A.update({'c', 'd'})    #iterable的参数都可以传递
>>> A
set(['a', 'c', 'b', 'd'])
>>> 

另一种写法是:@|=@

>>> A = {'a','b'}
>>> A |= {'c', 'd'}
>>> A
set(['a', 'c', 'b', 'd'])
>>>

交集更新

内置函数intersection_update返回的结果是两个集合的交集

>>> A = {'a','b'}
>>> A.intersection_update({'b', 'd'})   #iterable的参数都可以传递
>>> A
set(['b'])
>>>

另一种写法是 &=

>>> A = {'a','b'}
>>> A &= {'b', 'd'}
>>> A
set(['b'])
>>> 

差集更新

内置函数difference_update返回的结果是两个集合的差集

>>> A = {'a','b'}
>>> A.difference_update({'b', 'd'})   #iterable的参数都可以传递
>>> A
set(['a'])
>>>  

另一种写法是 -=

>>> A = {'a','b'}
>>> A -= {'b', 'd'}
>>> A
set(['a'])
>>> 

对称差集更新

内置函数symmetric_difference_update返回的结果是两个集合的对称差集

>>> A = {'a','b'}
>>> A.symmetric_difference_update({'b', 'd'})   #iterable的参数都可以传递
>>> A
set(['a', 'd'])
>>>

另一种写法是 ^=

>>> A = {'a','b'}
>>> A ^= {'b', 'd'}
>>> A
set(['a', 'd'])
>>> 

set移除元素

remove函数
set类型有好几个内置函数用来从set中移除已有的元素,首先是remove函数,如果remove的元素不存在,会抛出KeyError异常。

>>> A = {'a','b'}
>>> A.remove('c')
Traceback (most recent call last):
  File "<pyshell#65>", line 1, in <module>
    A.remove('c')
KeyError: 'c'
>>>

discard函数

若要不抛出异常,可以使用discard函数

>>> A = {'a','b'}
>>> A.discard('c')
>>> A
set(['a', 'b'])
>>>

pop函数

上述两个函数都是指定set中某一个元素,而pop函数无需指定元素,每次运行时会删除任意一个元素,并返回这个元素的值。当set为空时,抛出 KeyError

>>> A = {'a','b'}
set(['a', 'b'])
>>> A.pop()
'a'
>>> A.pop()
'b'
>>> A.pop()
Traceback (most recent call last):
  File "<pyshell#71>", line 1, in <module>
    A.pop()
KeyError: 'pop from an empty set'
>>>

清空set

set的内置函数 clear 用来清空set

>>> A = {'a','b'}
set(['a', 'b'])
>>> A.clear()
>>> A
set([])
>>>

set comprehension

与list、dict类似,set类型也能有comprehension的构造法:

>>> {i for i in range(10)}
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> 

本页面内容采用 署名协议 CC-BY 授权。欢迎转载,请保留原文链接


分类

相关文章