set对象是包含了无序的、不能重复值的集合。通常用来成员测试、从序列中移除重复元素以及数学上的计算,如交集(intersection)、并集(union)、差集(difference)以及对称差集(symmetric difference).
In [6]: l = [1,1,2,2,3,4,5,5]
In [7]: s = set(l)
In [8]: s
Out[8]: {1, 2, 3, 4, 5}
向其他集合一样,set支持 x in set、len(set) 和 for x in set这样的操作。作为一个无序集合,sets不记录元素的位置和插入的次序。因此,sets不支持索引、切片以及其他类队列操作。
python中有两种内置的集合类型:set和frozenset. set是可变的,可以使用add() 、remove()方法来改变set。由于它可以改变,因此没有散列值,也不能用作字典的键和其他set的元素。frozenset是固定的、有用散列值的;因此可以用作字典的键或者是其他set的元素。
二者都支持set之间的比较、只有每一个set都是另一个set的子集时,这两个set才相等。只有当第一个set是另一个set的子集,别且两个set不相等时,第一个set才小于第二个set。只有第一个set是第二个set的超集、并且两者不相等时,第一个set才大于第二个set。
set可以和frozenset来比较。 "set('abc') == frozenset('abc')" 将会返回True.
子集和相等的比较不能产生一个完全的排序功能。例如两个disjoint set不能相等,也不是另一个的子集。因此 a<b,a==b,a>b都会返回false。因此,不能使用__cmp__方法。
set和frozenset的混合运算会返回第一个操作元素的类型。 "frozenset('ab') | set('bc')" 会返回frozenset 类型。
参考:https://docs.python.org/2.4/lib/types-set.html