Python中的数组过滤?

127 投票
10 回答
272725 浏览
提问于 2025-04-16 15:35

比如,我有两个列表

 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]

撰写回答