集合
集合是一个无序的不重复元素序列,可以迭代,也可以修改。集合迭代的时候元素是随机的。
集合通常用来 membership testing, 去重, 也可以用来求交集并集补集。
介绍一下如何创建集合和集合常见的用法。
创建集合
>>> s1 = set()
>>> print(s1)
set()
>>> l1 = [1, 2, 3, 4, 5, 4, 3]
>>> s2 = set(l1)
>>> print(s2)
{1, 2, 3, 4, 5}
#可以看到集合可以用来去重
>>> s3 = set('jwang')
>>> print(s3)
{'n', 'w', 'j', 'g', 'a'}
# 可以看到集合迭代的时候元素是随机的
>>> s4 = set(["C", “C++”, “Python”])
>>> print(s4)
{'C', 'Python', 'C++'}
修改集合
-
添加
add
>>> print(s2) {1, 2, 3, 4, 5} >>> s2.add(6) >>> print(s2) {1, 2, 3, 4, 5, 6} >>> s2.add((7,8)) >>> print(s2) {1, 2, 3, 4, 5, 6, (7, 8)}
-
更新:通过传入一个列表来更新 update(list)
>>> print(s2)
{1, 2, 3, 4, 5, 6, (7, 8)}
>>> s2.update([6, 0])
>>> s2
{0, 1, 2, 3, 4, 5, 6, (7, 8)}
>>> s2.update([7, 8, 9], [10, 11])
>>> s2
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, (7, 8)}
>>>
更新:通过传入一个集合来更新 update(set)
>>> s2.update({100, 200})
>>> s2
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 200, 100, (7, 8)}
-
删除 remove(val) discard(val)
不同点是remove在元素不存在时会报错,discard什么也不做。>>> s2.remove(0) >>> s2 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 200, 100, (7, 8)} >>> s2.discard(0) >>> s2.remove(0) Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 0
一些其他方法
# copy 浅复制
>>> s3 = s2.copy()
>>> s3
{2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 200, 100, (7, 8)}
# clear 清空
>>> s3.clear()
>>> s3
set()
# set pop(),随机删除一个元素,并返回
>>> s = set([1, 2, 3])
>>> s.pop()
1
>>> s
{2, 3}
集合间操作
-
交集
>>> s2 = set([1, 2, 3, 4, 5, 10, 15, 22]) >>> s1 = set([1, 2, 3, 4, 5, 6, 7, 8]) >>> s1 & s2 {1, 2, 3, 4, 5} >>> s1.intersection(s2) {1, 2, 3, 4, 5}
-
求集合的不同
>>> s1.difference(s2) {8, 6, 7} >>> s2.difference(s1) {10, 22, 15}
-
是不是子集
>>> s3 = set([6, 7, 8]) >>> s2.issubset(s2) True >>> s2.issubset(s1) False >>> s1.issuperset(s3) True