array filter in python?

Question:

For example, I have two lists

 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 

Is there a built-in function in python to do this?

Asked By: kn3l

||

Answers:

How about

set(A).difference(subset_of_A)
Answered By: JoshAdel

Yes, the filter function:

filter(lambda x: x not in subset_of_A, A)
Answered By: carlpett

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

Answered By: NPE
>>> a = set([6, 7, 8, 9, 10, 11, 12])
>>> sub_a = set([6, 9, 12])
>>> a - sub_a
set([8, 10, 11, 7])
Answered By: Jake

set(A)-set(subset_of_A) gives your the intended result set, but it won’t retain the original order. The following is order preserving:

[a for a in A if not a in subset_of_A]
Answered By: Alexander Gessler

Use the Set type:

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
Answered By: Platinum Azure

This was just asked a couple of days ago (but I cannot find it):

>>> 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]

It might be better to use sets from the beginning, depending on the context. Then you can use set operations like other answers show.

However, converting lists to sets and back only for these operations is slower than list comprehension.

Answered By: Felix Kling

If the order is not important, you should use set.difference. However, if you want to retain order, a simple list comprehension is all it takes.

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

EDIT: As delnan says, performance will be substantially improved if subset_of_A is an actual set, since checking for membership in a set is O(1) as compared to O(n) for a list.

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]
Answered By: Chinmay Kanchi
>>> 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])
>>> 
Answered By: Andreas Jung

No, there is no build in function in python to do this, because simply:

set(A)- set(subset_of_A)

will provide you the answer.

Answered By: eat
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.