集合
集合是唯一对象的无序组合。这意味着它不是列表之类的顺序的对象,不能包含相同 的元素。在没有顺序要求的情况下,集合是删除重复、计算交集、并集以及两个或以上对象组之间差异的理想数据结构。集合不支持索引和切片操作,但'in'和 'not in'运算符可以用来测试一个元素是否在集合中。
创建集合
要创建集合,可使用方法set(x) ,其中x是一个类序列的对象(即字符串、元组或列表)。
>>> set ('MGSNKSKPKDASQ')
set (['A','D','G','K','M','N','Q','P','S'])
>>> set ((1,2,3,4 ))
set([1,2,3,4])
>>> set ([1,2,3,'a','b','c'])
set (['a',1,2,3,'c','b'])
即使输入文件中的元素顺序不同,所产生的集合中的元素也会完全相同。 集合中的元素必须是不可变对象,如数字、字符串或元组,因而列表、字典或其他集合不能作为集合的元素。
由于集合是唯一元素的组合,创建集合时多余的元素会被自动删除,如下所示 :
>>> id_list = ['P04637','P02340','P10361 ','Q29537',' P04637','P10361 ',' P10361']
>>> id_set = set(id_list)
>>>id_set
set (['Q29537','P10361','P04637'])
这是一种非常简洁的寻找唯一标识符的方式。
集合的方法
方法 add()可用于将一个元素添加到集合,如果所添加的元素已存在于该集合中,add() 就不起任何作用。方法 update()用于将几个元素添加到集合,除非它们在集合中己存在。 pop() 、remove()和 discard()可以将元素从集合中去除。
>>>s1 = set ([1,2,3,4,5])
> >>s1.add (10)
>>>s1
set([1,2,3,4,5,10])
>>>s1.update ( ['a','b','c'] )
>>>s1
set (['a',1,2,3,4,5,10,'c','b'])
检查集合成员
运算符in可以检查元素是否包含在集合中。
>>>5 in s1
True
>>>6 in s1
False
>>>6 not in s1
True
>>> s2 = set([10,4,5])
>>> s1.issubset (s2)
False
>>> s1.issubset(s2)
True
使用集合来确定数据重叠/差异
两个集合 (s1 和s2) 的并集 (union)创建了一个包含两个s1 和s2 中的所有元素的新集合。
>>> s1 = set (['a','b','c'])
>>> s2 = set (['c','d','e'])
>>> sl.union(s2)
set (['a','c','b','e','d'])
两个集合 s1 和 s2 的交集(intersection)创建了一个包含既在 s1 也在s2 中的元素的新集合。
>>> s1 = set(['a','b','c'])
>>> s2 = set (['c','d','e'])
>>> s1.intersection(s2)
set (['c'])
两个集合 s1 和 s2 的对称差(symrnetric difference)创建了一个包含只在 s1 或只在 s2, 即不同时存在于二者中的元素的新集合。
>>> s1 = set(['a','b','c'])
>>> s2 = set (['c','d','e'])
>>> s1.symrnetric_difference(s2)
set (['a','b','e','d'])
两个集合 s1 和 s2 的差(difference)创建了一个包含只在 s1 不在 s2 中的元素的新集合。
>>> s1= set (['a','b','c'])
>>> s2 = set (['c','d','e'])
>>> sl.difference(s2)
set (['a','b'])
>>> s2.difference(s1)
set (['e','d'])