Wie vergleicht man eine Liste von Listen / Sets in Python?
Was ist der einfachste Weg, zu vergleichen mit den 2 Listen/sets-und-Ausgabe die Unterschiede? Gibt es eingebaute Funktionen, die mir helfen, vergleichen Sie verschachtelte Listen/sets?
Eingänge:
First_list = [['Test.doc', '1a1a1a', 1111],
['Test2.doc', '2b2b2b', 2222],
['Test3.doc', '3c3c3c', 3333]
]
Secnd_list = [['Test.doc', '1a1a1a', 1111],
['Test2.doc', '2b2b2b', 2222],
['Test3.doc', '8p8p8p', 9999],
['Test4.doc', '4d4d4d', 4444]]
Erwartete Ausgabe:
Differences = [['Test3.doc', '3c3c3c', 3333],
['Test3.doc', '8p8p8p', 9999],
['Test4.doc', '4d4d4d', 4444]]
InformationsquelleAutor der Frage tang | 2011-05-24
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du willst also die Differenz zwischen zwei Listen von Elementen.
Zuerst würde ich wiederum jede Liste von Listen in eine Liste von Tupeln, also als Tupel sind hashable (Listen nicht), so können Sie konvertieren Sie Ihre Liste von Tupeln in eine Menge von Tupeln:
Dann können Sie sets machen:
BEARBEITEN (vorgeschlagen von sdolan): Sie könnte getan haben, die letzten beiden Schritte für jede Liste in einem one-liner:
Hinweis:
map
ist eine funktionale Programmierung Befehl gilt, dass die Funktion im ersten argument (in diesem Fall dietuple
- Funktion) zu jedem Element im zweiten argument (in unserem Fall eine Liste von Listen).finden, und die symmetrische Differenz zwischen den sets:
Hinweis
first_set ^ secnd_set
entsprichtsymmetric_difference
.Auch wenn Sie nicht wollen, zu verwenden, setzt (z.B. mit python 2.2), seine ziemlich einfach zu tun. E. g., mit Liste Verstehens:
oder mit der funktionellen
filter
Befehl undlambda
Funktionen. (Sie müssen testen Sie beide Möglichkeiten und kombinieren).InformationsquelleAutor der Antwort dr jimbob
Nicht sicher, ob es eine nette Funktion, aber der "manuelle" Weg, es zu tun ist nicht schwer:
InformationsquelleAutor der Antwort Sam Magura
InformationsquelleAutor der Antwort pyfunc
ich denke, du wirst konvertieren müssen Ihre Listen setzt:
InformationsquelleAutor der Antwort
http://docs.python.org/library/difflib.html ist ein guter Ausgangspunkt für das, was Sie suchen.
Wenn Sie es rekursiv auf die deltas, Sie sollten in der Lage sein zu handhaben, verschachtelte Datenstrukturen. Aber es dauert einige Arbeit.
InformationsquelleAutor der Antwort btilly
Mithilfe von set Verstehens, können Sie machen es zu einem one-liner. Wenn Sie wollen:
bekommen eine Menge von Tupeln, dann:
Oder um eine Liste von Tupeln, dann:
Oder eine Liste von Listen (wenn Sie wirklich wollen), dann:
PS: ich lese hier: https://stackoverflow.com/a/10973817/4900095dass die map () - Funktion ist nicht pythonic Art und Weise, Dinge zu tun.
InformationsquelleAutor der Antwort Sukrit Gupta