1.1 集合
是一种可迭代的,无序的,不能包含重复元素的数据结构。集合的元素是不可变的,如:int, float, string ,tuple等,可变的内容不可以是集合的元素,如:list, dict, set等。
集合可分为:
- 可变集合(set)
- 不可变集合(frozenset)
1.2 可变集合
1.2.1 创建集合
>>> a = {1,3,2,4}
>>> a
{1, 2, 3, 4}
用大{}表示,注意:字典也用{}表示,但里面存放的是键值对。
>>> a = set() # 创建空集合,如果 a={} 是空字典
>>> a
set()
用set函数创建集合,里面跟上一个序列:
>>> a = set("hello")
>>> a
{'e', 'o', 'h', 'l'}
1.2.2 修改可变集合
-
添加元素: add(elem)
注意:不能添加重复元素,因为集合元素不重复。
>>> a = set()
>>> a = {1,2,3,4}
>>> a.add(5)
>>> a
{1, 2, 3, 4, 5}
>>> a.add(4)
>>> a
{1, 2, 3, 4, 5}
-
删除元素:remove(elem); discard(elem)
两种元素的区别是:删除不存在的元素前才抛出异常,后者不会。
>>> a = {1,2,3,4}
>>> a.remove(1)
>>> a
{2, 3, 4}
>>> a.discard(4)
>>> a
{2, 3}
>>> a.remove(4) # 4不存在,抛出异常
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 4
- 删除任意一个元素,返回值是删除的元素:pop()
>>> a = {1,3,2,4}
>>> a.pop()
1
- 清空集合: clear()
>>> a = {1,2,3,4}
>>> a.clear()
>>> a
set()
1.2.3 其它方法
- 复制一个集合: copy()
>>> a = {1,2,3,4}
>>> b = a.copy()
>>> b
{1, 2, 3, 4}
- 两个集合空交集返回真: isdisjoint()
>>> a = {1,2,3,4}
>>> b = {1,2}
>>> a.isdisjoint(b) # 有交集返回False
False
- 是子集返回真: issubset()
>>> a = {1,2,3,4}
>>> b = {1,2,3,4,5}
>>> a.issubset(b)
True
>>> b.issubset(a)
False
- 是超集返回真: issuperset()
>>> a = {1,2,3,4,5}
>>> b = {1,2}
>>> c = {1,2,6}
>>> a.issuperset(b)
True
>>> a.issuperset(c)
False
- 合并集合到集合A:update()
>>> a = {1,2,3,4}
>>> a.update({3,4,5,6})
>>> a
{1, 2, 3, 4, 5, 6}
1.2.4 集合的运算
运算符 | 说明 |
---|---|
& | 交集:获取两个集合都存在的元素 |
| | 并集:两个集合元素合并在一起,去掉重复的。 |
- | 差集:属于集合A,但不属于集合B的 |
^ | 对称差集:只属于集合A,集合B,即去掉交集剩下的。 |
== | 相等 |
!= | 不相等 |
in | 在里面 |
not in | 不在里面 |
- 交集:intersection; intersection_update
>>> a = {1,2,3,4}
>>> b = {1,2}
>>> a & b
{1, 2}
>>> a.intersection(b)
{1, 2}
# intersection_update会修改集合A,而前者生成新的集合
>>> a = {1,2,3,4}
>>> b = {3,4,5,6}
>>> a.intersection_update(b)
>>> a
{3, 4}
- 并集:union
>>> a = {1,2,3,4}
>>> b = {5,6}
>>> a | b
{1, 2, 3, 4, 5, 6}
>>> a.union(b)
{1, 2, 3, 4, 5, 6}
- 差集:difference;difference_update()
>>> a = {1,2,3,4}
>>> b = {1,2}
>>> a - b
{3, 4}
>>> a.difference()
{1, 2, 3, 4}
>>> b - a # 反过来减,去掉之后没有元素了。
set()
# difference_update 会修改集合A
>>> a = {1,2,3,4}
>>> b = {3,4,5,6}
>>> a - b
{1, 2}
>>> a # 没变
{1, 2, 3, 4}
>>> a.difference_update(b)
>>> a # 变了
{1, 2}
- 对称差集:symmetric_difference(); symmetric_difference_update()
>>> a = {1,2,3,4}
>>> b = {3,4,5,6}
>>> a ^ b
{1, 2, 5, 6}
>>> a.symmetric_difference(b)
{1, 2, 5, 6}
# symmetric_difference_update 修改集合A
1.2.5 通用函数
函数 | 说明 |
---|---|
enumerate() | 给元素编号,返回一个enumerate对象 |
len() | 长度 |
max() | 最大值 |
min() | 最小值 |
sorted() | 排序,生成新列表 |
sum() | 求和 |
>>> a = {'a','b','c','hello'}
>>> a
{'a', 'b', 'hello', 'c'}
>>> for i in enumerate(a):
... print(i)
...
(0, 'a')
(1, 'b')
(2, 'hello')
(3, 'c')
1.3 不可变集合 frozenset
称为冻结集合,不可更改,但可以访问和集合运算。
不可变集合可以做为字典的键,可以做为集合的元素。
# 创建
>>> a = frozenset(["张三","李四","hello",1,2,3])
>>> a
frozenset({1, 2, 3, 'hello', '张三', '李四'})
>>> type(a)
<class 'frozenset'>
1.4 集合推导式
同列表推导式
# [item for item in iterable]
# [item for item in iterable if condition]
>>> a = {i for i in range(10)}
>>> a
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
标签:数据结构,1.2,PYTHON,元素,update,set,集合,difference
From: https://www.cnblogs.com/three-sheep/p/16940942.html