python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。sets 支持 x in set, len(set),和 for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。

1. 获取两个list 的交集

#方法一:
 a=[2,3,4,5]
 b=[2,5,8]
 c=["abc","cde","haha","lala"]
 d=["abc","dddd","eee","lal"]
 tmp = [val for val in a if val in b]
 print tmp
 #[2, 5]

#方法二
 print list(set(a).intersection(set(b)))

方法三:
>>> 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']) 
>>> d = t ^ s # 对称差集(项在t或s中,但不会同时出现在二者中)

2. 获取两个list 的并集

print list(set(a).union(set(b)))

3. 获取两个 list 的差集

print list(set(b).difference(set(a))) # b中有而a中没有的

 

讨论:

因为set以后,list变得无序了,但是仍旧想保留list之前的顺序

in Python 3.6, set() now should keep the order, but there is another solution for Python 2 and 3:
>>> x = [1, 2, 20, 6, 210]
>>> sorted(set(x), key=x.index)
[1, 2, 20, 6, 210]

>>> a =[1, 2, 'a']
>>> b=[2]
>>> sorted((set(a)-set(b)),key=a.index)
[1, 'a']

 

参考资料:
http://blog.chinaunix.net/uid-200142-id-3992553.html
http://blog.csdn.net/business122/article/details/7541486

发表评论

电子邮件地址不会被公开。 必填项已用*标注