本文简单介绍了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-NC 授权。
欢迎转载,请保留原文链接 https://www.lfhacks.com/tech/python-set-type/ ,且不得用于商业用途。