什么是集合
集合 set
是一个无序不重复元素的序列。
set
和 dict
类似,也是一组 key
的集合,但不存储 value
。由于 key
不能重复,所以,在 set
中,没有重复的 key
。
在 python 中,使用大括号 {}
或者 set()
来创建集合。
注意: 创建一个空集合必须使用 set()
而不能使用 {}
,因为 {}
是用来创建一个空字典的。
>>> s = {1, 2.33, False, 'aa', 'bb', 'aa'}
>>> s
{False, 1, 2.33, 'bb', 'aa'}
>>> ss = set('hello')
>>> ss
{'o', 'e', 'h', 'l'}
添加元素
使用 add
方法:
>>> s = {1, 2, 3}
>>> s
{1, 2, 3}
>>> s.add(1) #如果元素已存在,则不进行任何操作
>>> s
{1, 2, 3}
>>> s.add(4)
>>> s
{1, 2, 3, 4}
set 和 dict 的唯一区别仅在于没有存储对应的 value。但是,set 的原理和 dict 一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证 set 内部 “不会有重复元素”。
试试把 list 放入 set,看看是否会报错:
>>> s.add(['a', 'b'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
使用 update
方法也可以添加元素,且参数可以是列表、元组、字典、集合等:
>>> s
{1, 2, 3, 4}
>>> s.update([11,22]) #添加列表
>>> s
{1, 2, 3, 4, 11, 22}
>>> s.update((33, 44)) #添加元组
>>> s
{1, 2, 3, 4, 33, 11, 44, 22}
>>> s.update({'name':'maratrix'}) #添加字典
>>> s
{1, 2, 3, 4, 33, 11, 44, 22, 'name'}
>>> s.update({'hello', 'world'}) #添加集合
>>> s
{1, 2, 3, 4, 33, 'world', 11, 44, 'hello', 22, 'name'}
>>> s.update([5,6], (7,8)) #添加多个参数
>>> s
{1, 2, 3, 4, 33, 'world', 5, 6, 7, 8, 11, 44, 'hello', 22, 'name'}
删除元素
使用 remove
方法,如果元素不存在,则会报错:
>>> s = {1,2,3}
>>> s.remove(1)
>>> s.remove(1) # 元素不存在报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 1
还有一个方法 discard()
也是移除集合中的元素,且如果元素不存在,不会发生错误:
>>> s = {1,2,3}
>>> s.discard(1)
>>> s
{2, 3}
>>> s.discard(1) #元素不存在也不会报错
使用 pop
方法可以随机删除集合中的一个元素:
>>> s = {1,2}
>>> s.pop()
1
>>> s.pop()
2
>>> s.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'
集合为空时候,使用 pop
方法会报错。
计算元素个数
>>> s = {1,2}
>>> len(s)
2
清空集合
>>> s = {1,2}
>>> s.clear()
>>> s
set()
判断元素是否存在
判断元素 s 是否在集合 x 中存在,存在返回 True,不存在返回 False。
>>> s = {1,2}
>>> 1 in s
True
>>> 3 in s
False