Zum Beispiel habe ich zwei Listen
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
Gibt es eine integrierte Funktion in Python, um dies zu tun?
Wenn die Reihenfolge nicht wichtig ist, sollten Sie verwenden set.difference
. Wenn Sie jedoch die Reihenfolge beibehalten möchten, ist ein einfaches Listenverständnis alles, was Sie brauchen.
result = [a for a in A if a not in subset_of_A]
BEARBEITEN : Wie Delnan sagt, wird die Leistung erheblich verbessert, wenn subset_of_A
es sich um eine tatsächliche handelt set
, da die Überprüfung der Mitgliedschaft in a set
O (1) im Vergleich zu O (n) für eine Liste ist.
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
ein Real erstellt wirdset
, der einenO(1)
Mitgliedschaftstest gibt (anstattO(n)
wie bei Listen).Ja, die
filter
Funktion:filter(lambda x: x not in subset_of_A, A)
quelle
filter
die Liste selbst zurückgegeben wird, während in Python 3 ein Iterator zurückgegeben wird.list(filter(...))
Nein, es gibt keine eingebaute Funktion in Python, um dies zu tun, weil einfach:
wird Ihnen die Antwort geben.
quelle
set(A)-set(subset_of_A)
gibt Ihnen die beabsichtigte Ergebnismenge, behält jedoch nicht die ursprüngliche Reihenfolge bei. Folgendes ist umtragserhaltend:[a for a in A if not a in subset_of_A]
quelle
tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))
quelle
Wie wäre es mit
quelle
Dies wurde erst vor ein paar Tagen gefragt (aber ich kann es nicht finden):
>>> 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]
set
Je nach Kontext ist es möglicherweise besser, s von Anfang an zu verwenden. Dann können Sie Set-Operationen verwenden, wie andere Antworten zeigen.Das Konvertieren von Listen in Mengen und zurück nur für diese Vorgänge ist jedoch langsamer als das Listenverständnis.
quelle
Verwenden Sie den
Set
Typ: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
quelle
>>> a = set([6, 7, 8, 9, 10, 11, 12]) >>> sub_a = set([6, 9, 12]) >>> a - sub_a set([8, 10, 11, 7])
quelle
>>> 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]) >>>
quelle