07-02集合
集合set
集合是数学意义上的集合
特征:没有重复元素
集合对象操作
定义集合
方法1:s = set()
方法2:s = {1, 2, 3}
方法3:s = set(range(3)) # 初始化一个可迭代对象
删除集合
需要使用del方法删除
截至2020年5月23日,本人暂时还未发现其他的方法
集合元素的操作
增加
- s.add(value)方法
- s.update(可迭代对象)附加一个可迭代对象
- 增加元素都是原地修改返回None
- 集合的特性就是没有重复元素,所以是不会新增重复的元素的
In [45]: s = {0, 1, 2}
In [46]: s.add(3) # 和列表类似, 增加单个元素, 原地修改
In [47]: s
Out[47]: {0, 1, 2, 3}
In [48]: s.add(3) # 增加已存在的元素, 什么也不做
In [49]: s
Out[49]: {0, 1, 2, 3}
In [50]: s.update(range(4, 7)) # 和列表类似, 附加一个可迭代对象, 原地修改
In [51]: s
Out[51]: {0, 1, 2, 3, 4, 5, 6}
In [52]: s.update(range(4, 7)) # 对于已经存在的元素, 什么也不做
In [53]: s
Out[53]: {0, 1, 2, 3, 4, 5, 6}
update的实现
In [54]: for e in itrator:
...: s.add(e)
删除
- remove:删除给定的元素, 元素不存在, 抛出KeyError
- discard:删除给定的元素, 元素不存在, 什么也不做
- pop:随机删除一个元素并返回, 集合为空, 抛出KeyError。在集合中无法根据索引删除(不是线性结构)
- clear:清空集合
In [55]: s.remove(0) # 删除已经存在的值
In [56]: s
Out[56]: {1, 2, 3, 4, 5, 6}
In [57]: s.remove(10) # 删除不存在的值, 抛出KeyError
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-57-99f2b84d3df8> in <module>()
----> 1 s.remove(10)
KeyError: 10
In [58]: s.pop() # 删除并返回删除的元素
Out[58]: 1
In [59]: s
Out[59]: {2, 3, 4, 5, 6}
In [60]: s.clear() # 清空
In [61]: s.pop() # 当集合为空时, 抛出KeyError
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-61-e76f41daca5e> in <module>()
----> 1 s.pop()
KeyError: 'pop from an empty set'
In [62]: s = set(range(10))
In [63]: s
Out[63]: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
In [64]: s.discard(3) # 删除一个已经存在的值, 删除并不返回
In [65]: s
Out[65]: {0, 1, 2, 4, 5, 6, 7, 8, 9}
In [66]: s.discard(10) # 删除一个不存在的值, 也不返回任何值
修改
集合不能修改单个元素
查找
集合不能通过索引访问。
集合没有访问单个元素的方法。
集合不是线性结构, 集合元素没有顺序