Например, у меня есть два списка
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?
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]
subset_of_A
a realset
, which givesO(1)
membership test (instead ofO(n)
as with lists).Yes, the
filter
function:filter(lambda x: x not in subset_of_A, A)
источник
filter
returns the list itself, while in Python 3, it returns an iterator.list(filter(...))
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.
источник
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]
источник
tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))
источник
How about
set(A).difference(subset_of_A)
источник
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
set
s 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.
источник
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
источник
>>> 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]) >>>
источник