2011-11-23 62 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)