449 Stimmen

Wie findet man Listenschnittpunkte?

a = [1,2,3,4,5]
b = [1,3,5,6]
c = a and b
print c

tatsächliche Leistung: [1,3,5,6] erwartete Ausgabe: [1,3,5]

Wie kann man eine boolesche UND-Verknüpfung (Listenschnittmenge) zweier Listen erreichen?

19voto

Saftography Punkte 502

Ein funktioneller Weg kann erreicht werden durch filter y lambda Betreiber.

list1 = [1,2,3,4,5,6]

list2 = [2,4,6,9,10]

>>> list(filter(lambda x:x in list1, list2))

[2, 4, 6]

Bearbeiten: Es filtert x heraus, das sowohl in list1 als auch in list vorhanden ist, Set-Differenz kann auch mit erreicht werden:

>>> list(filter(lambda x:x not in list1, list2))
[9,10]

Bearbeiten2: python3 filter gibt ein Filterobjekt zurück und kapselt es mit list gibt die Ausgabeliste zurück.

15voto

Alex Hart Punkte 1610
a = [1,2,3,4,5]
b = [1,3,5,6]
c = list(set(a).intersection(set(b)))

Sollte wie ein Traum funktionieren. Und wenn Sie können, verwenden Sie Sets anstelle von Listen, um all diese Typwechsel zu vermeiden!

11voto

Sie können auch Folgendes verwenden numpy.intersect1d(ar1, ar2) .
Sie gibt die eindeutigen und sortierten Werte zurück, die sich in den beiden Arrays befinden.

7voto

Auf diese Weise erhalten Sie die Schnittmenge zweier Listen und erhalten auch die gemeinsamen Duplikate.

>>> from collections import Counter
>>> a = Counter([1,2,3,4,5])
>>> b = Counter([1,3,5,6])
>>> a &= b
>>> list(a.elements())
[1, 3, 5]

4voto

Mr_and_Mrs_D Punkte 29254

Für den Fall, dass Sie eine Liste von Listen haben map ist praktisch:

>>> lists = [[1, 2, 3], [2, 3, 4], [2, 3, 5]]
>>> set(lists.pop()).intersection(*map(set, lists))
{2, 3}

würde für ähnliche Iterables funktionieren:

>>> lists = ['ash', 'nazg']
>>> set(lists.pop()).intersection(*map(set, lists))
{'a'}

pop wird fehlschlagen, wenn die Liste leer ist, so dass Sie vielleicht in eine Funktion einschließen möchten:

def intersect_lists(lists):
    try:
        return set(lists.pop()).intersection(*map(set, lists))
    except IndexError: # pop from empty list
        return set()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X