集合可以使用add,remove进行元素增删。
如果左右两个操作数的类型相同,既都是可变集合或不可变集合, 则所产生的结果类型是相同的,但如果左右两个操作数的类型不相同(左操作数是 set,右操作数是 frozenset,或相反情况),则所产生的结果类型与左操作数的类型相同。还要注意,加号不是集合类型的运算符 。
(Union) Update ( |= )
这个更新方法从已存在的集合中添加(可能多个)成员,此方法和 update()等价
保留/交集更新( &= )
保留(或交集更新)操作保留与其他集合的共有成员。此方法和 intersection_update()等价
差更新 ( –= )
对集合 s 和 t 进行差更新操作 s-=t,差更新操作会返回一个集合,该集合中的成员是集合 s 去除掉集合 t 中元素后剩余的元素。此方法和 difference_update()等价
对称差分更新( ^= )
对集合s和t 进行对称差分更新操作(s^=t),对称差分更新操作会返回一个集合,该集合中的成员仅是原集合 s 或仅是另一集合 t 中的成员。此方法和 symmetric_difference_update()等价 。
表 7.4 集合类型方法
方法名称 操作
s.issubset(t) 如果s是t 的子集,则返回 True,否则返回 False
s.issuperset(t) 如果t是s 的超集,则返回 True,否则返回 False
s.union(t) 返回一个新集合,该集合是s和t 的并集
s.intersection(t) 返回一个新集合,该集合是s和t 的交集
s.difference(t) 返回一个新集合,该集合是 s 的成员,但不是 t 的成员
s.symmetric_difference(t) 返回一个新集合,该集合是 s 或 t 的成员,但不是s和t共有的成员
s.copy() 返回一个新集合,它是集合 s 的浅复制
很多内建的方法几乎和操作符等价。我们说"几乎等价",意思是它们间是有一个重要区别: 当用操作符时,操作符两边的操作数必须是集合。 在使用内建方法时,对象也可以是迭代类型的。为什么要用这种方式来实现呢? Python 的文档里写明: 采用易懂的 set('abc').intersection('cbs') 可以避免用 set('abc') [and] 'cbs' 这样容易出错的构建方法。
表 7.5 可变集合类型的方法
方法名 操作
s.update(t) 用 t 中的元素修改 s, 即,s 现在包含s或t 的成员
s.intersection_update(t) s 中的成员是共同属于s和t 的元素。
s.difference_update(t) s 中的成员是属于 s 但不包含在 t 中的元素
s.symmetric_difference_update(t) s 中的成员更新为那些包含在s或t 中,但不 是s 和 t 共有的元素
s.add(obj) 在集合 s 中添加对象 obj
s.remove(obj) 从集合s中删除对象obj; 如果obj不是集合s中的元素(obj not in s),将引发 KeyError 错误
s.discard(obj) 如果 obj 是集合 s 中的元素,从集合 s 中删除对象 obj;
s.pop() 删除集合 s 中的任意一个对象,并返回它
s.clear() 删除集合 s 中的所有元素