361 Stimmen

Prüfen, ob zwei ungeordnete Listen gleich sind

Ich suche nach einer einfachen (und schnellen) Methode, um festzustellen, ob zwei ungeordnet Listen enthalten dieselben Elemente:

Zum Beispiel:

['one', 'two', 'three'] == ['one', 'two', 'three'] :  true
['one', 'two', 'three'] == ['one', 'three', 'two'] :  true
['one', 'two', 'three'] == ['one', 'two', 'three', 'three'] :  false
['one', 'two', 'three'] == ['one', 'two', 'three', 'four'] :  false
['one', 'two', 'three'] == ['one', 'two', 'four'] :  false
['one', 'two', 'three'] == ['one'] :  false

Ich hoffe, dass ich dies ohne eine Karte tun kann.

3voto

fiacobelli Punkte 1942

Wenn Sie die Sammlungsbibliothek nicht verwenden wollen, können Sie auch so vorgehen: vorausgesetzt, dass a y b Ihre Listen sind, gibt das Folgende die Anzahl der übereinstimmenden Elemente zurück (es berücksichtigt die Reihenfolge).

sum([1 for i,j in zip(a,b) if i==j])

Deshalb,

len(a)==len(b) and len(a)==sum([1 for i,j in zip(a,b) if i==j])

wird sein True wenn die beiden Listen gleich sind, die gleichen Elemente enthalten und in der gleichen Reihenfolge angeordnet sind. False sonst.

Sie können also die Vergleichsfunktion wie die erste Antwort oben definieren, aber ohne die Sammlungsbibliothek.

compare = lambda a,b: len(a)==len(b) and len(a)==sum([1 for i,j in zip(a,b) if i==j])

y

>>> compare([1,2,3], [1,2,3,3])
False
>>> compare([1,2,3], [1,2,3])
True
>>> compare([1,2,3], [1,2,4])
False

2voto

Pabitra Pati Punkte 459

Die Antwort auf die obige Frage lautet in einem Satz :-

seien die beiden Listen list1 und list2, und Ihre Anforderung ist es, sicherzustellen, ob zwei Listen die gleichen Elemente haben, dann ist meiner Meinung nach die folgende Vorgehensweise die beste :-

if ((len(list1) == len(list2)) and
   (all(i in list2 for i in list1))):
    print 'True'
else:
    print 'False'

Das obige Codestück wird nach Ihrem Bedarf funktionieren, d.h. ob alle Elemente von list1 in list2 sind und umgekehrt.

Wenn Sie aber nur prüfen wollen, ob alle Elemente von Liste1 in Liste2 vorhanden sind oder nicht, dann brauchen Sie nur das folgende Codestück zu verwenden :-

if all(i in list2 for i in list1):
    print 'True'
else:
    print 'False'

Der Unterschied ist, dass letztere True ausgibt, wenn list2 einige zusätzliche Elemente zusammen mit allen Elementen von list1 enthält. Mit einfachen Worten: Es wird sichergestellt, dass alle Elemente von Liste1 in Liste2 vorhanden sein sollten, unabhängig davon, ob Liste2 einige zusätzliche Elemente enthält oder nicht.

1voto

sagi Punkte 527

Wie wäre es, wenn Sie die String-Darstellung der Listen abrufen und vergleichen könnten?

>>> l1 = ['one', 'two', 'three']
>>> l2 = ['one', 'two', 'three']
>>> l3 = ['one', 'three', 'two']
>>> print str(l1) == str(l2)
True
>>> print str(l1) == str(l3)
False

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