在Python中的数组filter?

例如,我有两个列表

A = [6, 7, 8, 9, 10, 11, 12] subset_of_A = [6, 9, 12]; # the subset of A the result should be [7, 8, 10, 11]; the remaining elements 

有没有在python内置函数来做到这一点?

如果顺序不重要,则应该使用set.difference 。 但是,如果你想保持秩序,只需要一个简单的列表理解。

 result = [a for a in A if a not in subset_of_A] 

编辑:如delnan所说,如果subset_of_A是一个实际的set ,性能将大大提高,因为检查一个set成员是O(1),而O(n)是一个列表。

 A = [6, 7, 8, 9, 10, 11, 12] subset_of_A = set([6, 9, 12]) # the subset of A result = [a for a in A if a not in subset_of_A] 

是的, filterfunction:

 filter(lambda x: x not in subset_of_A, A) 

不,python中没有构build函数,因为简单地说:

 set(A)- set(subset_of_A) 

会为你提供答案。

tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))

set(A)-set(subset_of_A)给出你想要的结果集,但是它不会保留原来的顺序。 以下是保存顺序:

 [a for a in A if not a in subset_of_A] 

这是刚刚问几天前(但我找不到):

 >>> A = [6, 7, 8, 9, 10, 11, 12] >>> subset_of_A = set([6, 9, 12]) >>> [i for i in A if i not in subset_of_A] [7, 8, 10, 11] 

根据上下文,从一开始就使用set可能会更好。 然后你可以使用像其他答案显示的设置操作 。

但是,将列表转换为集合并仅返回这些操作比列表理解慢。

怎么样

 set(A).difference(subset_of_A) 

使用Settypes:

 A_set = Set([6,7,8,9,10,11,12]) subset_of_A_set = Set([6,9,12]) result = A_set - subset_of_A_set 
 >>> a = set([6, 7, 8, 9, 10, 11, 12]) >>> sub_a = set([6, 9, 12]) >>> a - sub_a set([8, 10, 11, 7]) 
 >>> A = [6, 7, 8, 9, 10, 11, 12] >>> subset_of_A = [6, 9, 12]; >>> set(A) - set(subset_of_A) set([8, 10, 11, 7]) >>>