## 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

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  阅读(819)  评论(0编辑  收藏  举报