python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.  


sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,set不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。 

>>>x = set('spam')
>>>y = set('ham')
>>>x,y
set(['a', 'p', 's', 'm'])
set(['a', 'h', 'm'])

集合(set)的四大基本操作:

>>>z = x | y         #并集
set(['a', 'p', 's', 'h', 'm'])
>>>z = x & y         #交集
set(['a', 'm'])
>>>z = x - y         #差集,项在x中,不再y中
set(['p', 's'])
>>>z = x ^ y         #对称差集,不是x、y共有的
set(['h', 's', 'p'])

其他改变集合的方法intersection(), add(), update(), remove():

>>>x = set('abcde')
>>>y = set('bdxyz')
>>>z = x.intersection(y)        #等同于x&y
set(['b', 'd'])
>>>z.add('spam')                #插入一个项目
set(['b', 'd', 'spam'])         
>>>z.update(set(['X', 'Y']))    #按位置求并集
set(['Y', 'X', 'b', 'd', 'spam'])
>>>z.remove('b')                #根据值删除一个项目
set(['Y', 'X', 'd', 'spam'])

set的包含与被包含:>或< 或issubset():

>>>A = set([1,2,3])
>>>B = set(range(-5, 5))
>>>print A.issubset(B)
True

不可变限制和冻结集合:

集合只能包含不可变的(即可散列的)对象类型。因此,列表和字典都不能嵌入到集合中,但是如果你需要存储复合值的话,元组是可以嵌入的。

>>>A = set([1,2,3])
>>>B = [3,4,5,6]
>>>A.add(B)            #不能嵌套列表B
TypeError: unhashable type: 'list'
>>>C = (3,4,5,6)        
>>>A.add(C)            #可以嵌套元组tuple对象
set([1, 2, 3, (3, 4, 5, 6)])