目录
0.集合介绍
1.集合的定义和初始化
2.集合元素增加
3.集合元素删除
4.集合运算
0.集合介绍
非线性的数据结构,元素不可以索引
可变,无序,不重复的元素的集合
集合最大的用处就是去重
集合的元素必须是可hash的,集合元素可以迭代
1.集合的定义和初始化
set() -> new empty set object
set(iterable) -> new set object
>>> s1 = set()
>>> s1
set()
>>> s2 = set(range(5))
>>> s2
{0, 1, 2, 3, 4}
>>> s3 = set([1,2,3,4])
>>> s3
{1, 2, 3, 4}
>>> s4 = {}
>>> s4,type(s4)
({}, <class 'dict'>)
>>> s5 = {(1,2),4,'c'}
>>> s5
{'c', (1, 2), 4}
>>> s6 = {2,[2,3],'d'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
2.集合元素的增加
2.1 add(elem)
增加一个元素到set中
如果元素存在,不做任何操作
>>> s1 = {1,2,3,4,5}
>>> s1.add(0)
>>> s1
{0, 1, 2, 3, 4, 5}
>>> s1.add(2)
>>> s1
{0, 1, 2, 3, 4, 5}
>>> s1.add((21,4,5))
>>> s1
{0, 1, 2, 3, 4, 5, (21, 4, 5)}
>>> s1.add([2,4])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
2.3 update(*others)
合并其他元素到set集合中来
参数others必须是可迭代对象
>>> s1 = {1,2,3,4,5}
>>> s1.update([2,4,5,6])
>>> s1
{1, 2, 3, 4, 5, 6}
>>> s1.update((23,4,5))
>>> s1
{1, 2, 3, 4, 5, 6, 23}
>>> s1.update('abc')
>>> s1
{1, 2, 3, 4, 5, 6, 'a', 'b', 'c', 23}
>>> s1.update(8)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
3.集合元素的删除
3.1 remove(elem)
从set中移除一个元素,元素不存在,抛出KeyError异常
>>> s1 = {1,2,3,4,5}
>>> s1.remove(1)
>>> s1.remove(3)
>>> s1
{2, 4, 5}
>>> a = s1.remove(100)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 100
3.2 discard(elen)
从set中移除一个元素,元素不存在,不做任何操作
>>> s1 = {1,2,3,4,5}
>>> s1.discard(2)
>>> s1.discard(1)
>>> s1.discard(100)
>>> s1
{3, 4, 5}
3.3 pop() -> item
移除并返回任意的元素,空集返回KeyError异常
>>> s1 = {1,2,3,4,5}
>>> s1.pop(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
>>> s1.pop()
1
...
>>> s1.pop()
5
>>> s1.pop()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'pop from an empty set'
3.4 clear()
移除所有元素
>>> s1 = {1,2,3,4,5}
>>> s1.clear()
>>> s1
set()
3.5 成员运算符
in 和 not in
>>> s1 = {1,2,3,4,5}
>>> 1 in s1
True
>>> 23 in s1
False
4.集合运算
4.1 并集运算
将两个集合A和B的所有元素合并到一起,组成的集合称作集合A和集合B的并集
union(*others) -> 返回和多个集合合并后的新的集合
>>> s1 = {1,2,3}
>>> s2 = {4,5,6}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6}
>>> s3
{8, 9, 7}
>>> s1.union(s2,s3)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
| 运算符重载,等同于union
>>> s1,s2,s3
({1, 2, 3}, {4, 5, 6}, {8, 9, 7})
>>> s1 | s2 | s3
{1, 2, 3, 4, 5, 6, 7, 8, 9}
update(*others) -> 和多个集合合并,就地修改
>>> s1,s2,s3
({1, 2, 3}, {4, 5, 6}, {8, 9, 7})
>>> s1.update(s2,s3)
>>> s1
{1, 2, 3, 4, 5, 6, 7, 8, 9}
|= 等同于update
>>> s1,s2,s3
({1, 2, 3}, {4, 5, 6}, {8, 9, 7})
>>> s1 |= s2
>>> s1
{1, 2, 3, 4, 5, 6}
4.2 交集运算
集合A和集合B,由所有属于A且属于B的元素组成的集合
intersection(*other) -> 返回和多个集合的元素
>>> s1,s2,s4
({1, 2, 3, 4, 5, 6}, {4, 5, 6},{10, 22})
>>> s1.intersection(s2)
{4, 5, 6}
>>> s1.intersection(s4)
set()
& -> 等同intersection
>>> s1,s2,s4
({1, 2, 3, 4, 5, 6}, {4, 5, 6},{10, 22})
>>> s1 & s2
{4, 5, 6}
>>> s1 & s4
set()
intersection_update(*others) -> 获取和多个集合的交集,并就地修改
>>> s1,s2,s4
({1, 2, 3, 4, 5, 6}, {4, 5, 6}, {10, 4, 22, 6})
>>> s1.intersection_update(s2,s4)
>>> s1
{4, 6}
&= -> 等同intersection_update
>>> s2,s4
({4, 5, 6}, {10, 4, 22, 6})
>>> s2 &= s4
>>> s2
{4, 6}
4.3 差集运算
集合A和B,由所有属于A且不属于B的元素组成的集合
difference(*others) -> 返回和多个集合的差集
>>> s1 = {1,2,3,4}
>>> s2 = {2,3}
>>> s1.difference(s2)
{1, 4}
>>> s3 = {1,2,3,4,5}
>>> s1.difference(s3)
set()
- 等同于difference
>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 - s2
{1, 4}
>>> s1 - s3
set()
difference_update(*others) -> 获取和多个集合的差集并就地修改
>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.difference_update(s2)
>>> s1,s2
({1, 4}, {2, 3})
>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.difference_update(s2,s3)
>>> s1
set()
-= 等同于difference_update
>>> s1 = {1,2,3,4}
>>> s2 = {2,3}
>>> s1 -= s2
>>> s1
{1, 4}
4.4 对称差集
集合A和B,由所有不属于A和B的交集元素组成的集合,记作(A-B) U (B-A)
symmetric_difference(other) -> 返回和另一个集合的差集
>>> s1 = {1,2,3,4}
>>> s2 = {2,3}
>>> s3 = {1,2,3,4,5}
>>> s1.symmetric_difference(s2)
{1, 4}
>>> s1.symmetric_difference(s3)
{5}
^ 等同symmetric_difference
>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 ^ s2
{1, 4}
>>> s1 ^ s3
{5}
symmetric_difference_update(other) -> 获取和另一个集合的差集并就地修改
>>> s1,s2,s3
({1, 2, 3, 4}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.symmetric_difference_update(s2)
>>> s1
{1, 4}
>>> s1.symmetric_difference_update(s3)
>>> s1
{2, 3, 5}
^= 等同于symmetric_difference_update
>>> s1,s2,s3
({2, 3, 5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 ^= s2
>>> s1
{5}
4.5 其他
issubset(other),<= -> 判断当前集合是不是另一个集合的子集
>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.issubset(s2)
False
>>> s1.issubset(s3)
True
set1 < set2 -> 判断set1是否是set2的真子集
>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 < s2
False
>>> s2 < s3
True
issuperset(other),>= -> 判断当前集合是否是other的超集
>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.issuperset(s2)
False
>>> s3.issuperset(s2)
True
set1 > set2 判断set1是否是set2的真超集
>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1 > s2
False
>>> s3 > s2
True
isdisjoint(other) -> 当前集合和另一个集合有没有交集,没有交集返回True
>>> s1,s2,s3
({5}, {2, 3}, {1, 2, 3, 4, 5})
>>> s1.isdisjoint(s2)
True
>>> s1.isdisjoint(s3)
False
网友评论