2011-11-23 61 views
2

我正试图找到一种方法来使用一个列表来筛选出另一个列表的元素。Python筛选2列表

有点像相交的语法,但正好相反

lst = [0,1,2,6] 

secondlst = [0,1,2,3,4,5,6] 

预期结果

[3,4,5] 
+2

的答案所有secondlst的项目都是独一无二的,并且可以哈希在结果中的顺序不需要保留 –

+0

@gnibbler然而,对于那些大型数据集来说,'set'解决方案通常会更有效。不保持排序的 –

回答

12

简单的方法:

r = [v for v in secondlst if v not in lst] 

list(set(secondlst).difference(lst)) 
2

只看Python的set()'类型。

>>> lst = [0,1,2,6] 
>>> secondlst = [0,1,2,3,4,5,6] 
>>> set(lst).symmetric_difference(set(secondlst)) 
set([3, 4, 5]) 
+0

... – fortran

1

简单:

outcome = [x for x in secondlst if x not in lst] 

更复杂,但是如果更快善堂大:

lstSet = set(lst) 
outcome = [x for x in secondlst if x not in lstSet] 
2

您可以使用`set`假设使用filter

filter(lambda x: x not in lst, secondlst)