python 集合set

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

下面来点简单的小例子说明把。  
  
>>> x = set('spam')  
>>> y = set(['h','a','m'])  
>>> x, y  
(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))  
  
再来些小应用。  
  
>>> x & y # 交集  
set(['a', 'm'])  
  
>>> x | y # 并集  
set(['a', 'p', 's', 'h', 'm'])  
  
>>> x - y # 差集  
set(['p', 's'])  

a = t | s          # t 和 s的并集  
  
b = t & s          # t 和 s的交集  
  
c = t – s          # 求差集(项在t中,但不在s中)  
  
d = t ^ s          # 对称差集(项在t或s中,但不会同时出现在二者中)  
#Python中,使用相应的优化函数可以大大的提高系统的运行效率。比如下面的这个例子:
from time import time
lista=[1,2, 3, 4,5, 6, 7 ,8, 9, 10, 25, 50, 36, 43, 52]
listb=[2, 4, 6, 9, 36]
def noset_test():
    t = time()
    filter=[]
    for i in range(100000):
        for a in lista:
            for b in listb:
                if a==b:
                    filter.append(a)
    print 'no set total run time:'
    print time() -t
 
 
def set_test():
    t1 = time()
    for i in range(100000):
        list(set(lista)&set(listb))
 
    print "set total run time:"
    print time() - t1
 
noset_test();
set_test();
 
输出为:
no set total run time:
0.365000009537
set total run time:
0.15700006485
 
通过使用set,运行的时间明显的有缩减。
engineers = set(['John', 'Jane', 'Jack', 'Janice'])
programmers = set(['Jack', 'Sam', 'Susan', 'Janice'])
managers = set(['Jane', 'Jack', 'Susan', 'Zack'])
employees = list(engineers | programmers | managers)           # union
engineering_management = list(engineers & managers)            # intersection
fulltime_management = list(managers - engineers - programmers) # difference
print"employees", employees
print"engineering_management" ,engineering_management
print "fulltime_management", fulltime_management
 
输出为:
employees ['Jack', 'Sam', 'Susan', 'Jane', 'Janice', 'John', 'Zack']
engineering_management ['Jane', 'Jack']
fulltime_management ['Zack']

 

posted on 2015-06-09 17:19  BarneyZhang  阅读(821)  评论(0编辑  收藏  举报

导航