Na przykład mam dwie listy
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
Czy w Pythonie jest do tego wbudowana funkcja?
Jeśli kolejność nie jest ważna, należy użyć set.difference
. Jeśli jednak chcesz zachować porządek, wystarczy proste zrozumienie listy.
result = [a for a in A if a not in subset_of_A]
EDYCJA: Jak mówi delnan, wydajność zostanie znacznie poprawiona, jeśli subset_of_A
jest rzeczywista set
, ponieważ sprawdzanie członkostwa w a set
jest O (1) w porównaniu do O (n) dla listy.
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
prawdziwyset
, który dajeO(1)
test członkostwa (zamiastO(n)
jak w przypadku list).Tak,
filter
funkcja:filter(lambda x: x not in subset_of_A, A)
źródło
filter
zwraca samą listę, podczas gdy w Pythonie 3 zwraca iterator.list(filter(...))
Nie, w Pythonie nie ma wbudowanej funkcji, która mogłaby to zrobić, ponieważ po prostu:
set(A)- set(subset_of_A)
udzieli odpowiedzi.
źródło
set(A)-set(subset_of_A)
daje zamierzony zestaw wyników, ale nie zachowuje oryginalnej kolejności. Poniżej przedstawiono zachowanie kolejności:[a for a in A if not a in subset_of_A]
źródło
tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))
źródło
Co powiesz na
set(A).difference(subset_of_A)
źródło
Zapytano o to kilka dni temu (ale nie mogę tego znaleźć):
>>> 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]
W
set
zależności od kontekstu lepiej byłoby użyć s od początku. Następnie możesz użyć operacji na zestawach, tak jak pokazują inne odpowiedzi.Jednak konwertowanie list na zbiory iz powrotem tylko dla tych operacji jest wolniejsze niż rozumienie list.
źródło
Użyj
Set
typu: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
źródło
>>> a = set([6, 7, 8, 9, 10, 11, 12]) >>> sub_a = set([6, 9, 12]) >>> a - sub_a set([8, 10, 11, 7])
źródło
>>> 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]) >>>
źródło