Python中的数组过滤?
比如,我有两个列表
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里有没有现成的函数可以做到这一点?
10 个回答
11
使用set(A)-set(subset_of_A)
可以得到你想要的结果集,但这样做会丢失原来的顺序。下面的代码可以保持顺序:
[a for a in A if not a in subset_of_A]
105
是的,filter
函数:
filter(lambda x: x not in subset_of_A, A)
174
如果顺序不重要,你可以使用 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]