- 集合对象是一组无序排列的可哈希的值,集合成员可以做字典的键。
- 集合有两种类型,可变集合(set)和不可变集合(frozenset)
创建集合类型
工厂方法 set(), frozenset()
>>> s = set('hello')
>>> s
set(['h', 'e', 'l', 'o'])
>>> t = frozenset(['12345678', 100])
>>> t
frozenset(['12345678', 100])
集合类型操作符
- 成员关系(in, not in)
判定耨个元素是否是一个集合中的成员。(*不使用与集合的子集和超集,使用<,>)
- 集合等价/不等价(==, !=)
当且仅当其中两个集合的成员相同,被用于相同或不同的集合之间做比较。
- 子集/超集(<, <=, >, >=)
检查集合是否是其他集合的超集或子集
>>> set('abcd') < frozenset('abcde123')
True
"<, >"等是判断集合的超集和子集,而不是通常的大于和小于,所以以下都为False
>>> set('abcd') < set('abce123')
False
>>> set('abcd') < set('abce123')
False
>>> set('abcd') > set('abce123')
False
>>> s |f
set(['a', 'c', 'b', 'd', '1', '3', '2', '4']) #结果和s的类型相同,即Set
>>> f|s
frozenset(['a', 'c', 'b', 'd', '1', '3', '2', '4']) #结果和f的类型相同,即frozenset
False
- 联合(|),等价方法union()
- 交集(&),等价方法intersection()
- 差补/相对集合(-),等价方法difference()
- 对称查分(^),等价方法symmetric_difference(),只不能同时属于两个集合的元素
- 混合集合类型,集合操作结果的类型同左边的集合类型
>>> s = set('abcd')
>>> f = frozenset('1234')
>>> s |f
set(['a', 'c', 'b', 'd', '1', '3', '2', '4']) #结果和s的类型相同,即Set
>>> f|s
frozenset(['a', 'c', 'b', 'd', '1', '3', '2', '4']) #结果和f的类型相同,即frozenset
只用于可变集合(set)的操作符
- (Union) Update ( |= ), 等同于update()
- 保留/交集更新( &= ),等同于intersection_update()
- 差更新( -= ),等同于difference_update()
- 对称差分更新( ^= ),等同于symmetric_difference_update()
标准函数
len()
set(), frozenset()
集合的内建方法(set,frozenset)
- issubset(t),是否是给定集合t的子集
- issuperset(t),是否是给定集合t的超集
- union(t)
- intersection(t)
- difference(t)
- symmetric_difference(t)
- copy(t),浅复制
只用于可变集合的方法(set)
- s.update(t),将集合t添加到集合s中,即s现在包含s或t的成员
- s.intersection_udpate(t),s中的成员共同属于s和t的元素
- s.difference_update(t),s中的成员属于s但不包含在t中的元素
- s.symmetric_differrence_update(s),s中的成员更新为包含在s或t中,但不是s和t的共有元素
- s.add()
- s.remove(),从集合s中删除对象obj,如obj不是集合s中的元素,引发KeyError错误
- s.discard(),如obj是集合s中的元素,这从s中删除对象obj,如obj不是集合s中的元素,也不会引发错误。
- s.pop(),删除集合s中的任意一个对象,并返回它
- s.clear()
操作符和内建方法的比较
当用操作符时,操作符两边的操作数必须是集合
使用内建方法时,对象可以是迭代类型
>>> s = set('abcd')>>> s2 = set('xyz')>>> s |= s2 # s, s2都是set, "|="操作OK>>> sset(['a', 'c', 'b', 'd', 'y', 'x', 'z'])
>>> l = [1,2,3,4]
>>> s |= l #l为list类型, 出现异常Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
s |= l
TypeError: unsupported operand type(s) for |=: 'set' and 'list'
>>> s.update(l) #内建方法update, 可以使用list等迭代类型
>>> s
set([1, 2, 3, 4, 'a', 'c', 'b', 'd', 'y', 'x', 'z'])