在 leetcode 看到了349. Intersection of Two Arrays,题很简单,正好复习总结下 set 的各种操作

set 操作

添加删除

  • 添加

python set 的添加有两种常用方法,分别是add和update。
add方法:是把要传入的元素做为一个整个添加到 set 中,例如:

1
2
3
4
>>> a = set('boy')
>>> a.add('python')
>>> a
{'y', 'b', 'o', 'python'}

update方法:是把要传入的元素拆分,做为个体传入到 set 中,利用这个特效update可以添加多项,例如:

1
2
3
4
5
6
7
>>> a = set('boy')
>>> a.update('python')
>>> a
{'y', 'p', 't', 'b', 'n', 'h', 'o'}
>>> a.update('['ant','bat','cat']')#传入 set,并拆分
>>> a
{'y', 'p', 'ant', 't', 'b', 'n', 'h', 'cat', 'o', 'bat'}
  • 删除

removediscardpop方法:
removediscard都是删除 set 内元素的方法,区别在于remove删除不存在的元素时,会返回一个KeyError而discard不会。详情以及其他不同
pop方法按顺序删除元素,并返回删除元素

1
2
3
4
5
6
7
8
9
10
11
set(['y', 'python', 'b', 'o''n'])
>>> a.remove('python') #remove()
>>> a
set(['y', 'b', 'o', 'n'])
>>> a.discard('o') #discard()
>>> a
set(['y', 'b', 'n'])
>>> a.pop() #pop()
'y'
>>> a
set(['b', 'n'])
  • 其他

clear清空 set
copy复制 set

交集 并集 差集 对称差集 子集超集

  • 交集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> n = set('abc')
>>> m = set('bcdef')
>>> m & n #交集 &
{'c', 'b'}
>>> m.intersection(n) #交集 使用 intersection() 方法,取交集,创建新的set对象
{'c', 'b'}
>>> m.intersection_update(n) #交集 使用 intersection_update() 方法,取交集,更新原来的set对象
>>> m
{'c', 'b'}
>>> m = set('bcdef')
>>> m.isdisjoint(n) #使用 isdisjoint() 方法,没有交集,返回True,否则,返回False
False
>>> s = {'a'}
>>> m.isdisjoint(s)
True
>>> s.isdisjoint(m)
True
  • 并集
1
2
3
4
5
6
>>> n = set('abc')
>>> m = set('bcdef')
>>> m | n #并集 |
{'c', 'f', 'b', 'd', 'e', 'a'}
>>> m.union(n) #并集 使用 union() 方法,取并集,创建新的set对象
{'c', 'f', 'b', 'd', 'e', 'a'}
  • 差集
    与前后顺序有关
1
2
3
4
5
6
7
8
9
10
>>> n = set('abc')
>>> m = set('bcdef')
>>> m - n # m 与 n 的差集
{'e', 'd', 'f'}
>>> n - m # n 与 m 的差集
{'a'}
>>> m.difference(n) #使用 difference() 方法,m 与 n 的差集,创建新的set对象
{'e', 'd', 'f'}
>>> n.difference(m) #使用 difference() 方法,n 与 m 的差集,创建新的set对象
{'a'}
  • 对称差集
1
2
3
4
5
6
7
>>> m ^ n #对称差集-------------m 与 n 共同部分的补集
{'e', 'd', 'a', 'f'}
>>> m.symmetric_difference(n) #使用 symmetric_difference() 方法,取对称差集,创建新的set对象
{'e', 'd', 'a', 'f'}
>>> m.symmetric_difference_update(n) #使用 symmetric_difference_update() 方法,取对称差集,更新原来的set对象
>>> m
{'f', 'd', 'e', 'a'}
  • 子集与超集
1
2
3
4
5
6
7
>>> m
{'f', 'c', 'b', 'e', 'd'}
>>> k = {'f','b','e'}
>>> k.issubset(m) # k 是 m 的子集
True
>>> m.issuperset(k) # m 是 k 的超集
True