Schnittpunkt zweier verschachtelter Listen finden?
Weiß ich, wie man eine Kreuzung von zwei flachen Listen:
b1 = [1,2,3,4,5,9,11,15]
b2 = [4,5,6,7,8]
b3 = [val for val in b1 if val in b2]
oder
def intersect(a, b):
return list(set(a) & set(b))
print intersect(b1, b2)
Aber wenn ich herausfinden Kreuzung für verschachtelte Listen dann meine Probleme Los:
c1 = [1, 6, 7, 10, 13, 28, 32, 41, 58, 63]
c2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Am Ende möchte ich erhalten:
c3 = [[13,32],[7,13,28],[1,6]]
Können Sie Jungs geben mir eine hand mit diesem?
Verwandte
InformationsquelleAutor der Frage elfuego1 | 2009-03-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen:
Dann ist hier Ihre Lösung für Python 2:
In Python 3
filter
gibt ein iterierbar stattlist
so dass Sie brauchen, um die wrap -filter
Anrufe mitlist()
:Erklärung:
Den filter Teil nimmt jede subliste Element und prüft, um zu sehen, ob es in der Liste Quelle die c1.
Die list comprehension wird ausgeführt, für jede Teilliste in c2.
InformationsquelleAutor der Antwort Brian R. Bondy
Brauchen Sie nicht zu definieren Kreuzung. Es ist bereits ein Erster-Klasse-Teil gesetzt.
InformationsquelleAutor der Antwort S.Lott
Leute, die einfach nur schauen, wo die Schnittmenge der beiden Listen, der Fragesteller zwei Methoden:
Aber es ist eine hybrid-Methode, die effizienter ist, weil Sie nur eine Konvertierung zwischen Listen - /- Satz, im Gegensatz zu drei:
Dieser läuft in O(n), in der Erwägung, dass seine ursprüngliche Methode mit list comprehension wird in O(n^2)
InformationsquelleAutor der Antwort
Reine list-comprehension-version
Glätten Variante:
Verschachtelte Variante:
InformationsquelleAutor der Antwort jfs
Den funktionalen Ansatz:
angewendet werden kann, um den allgemeineren Fall von 1+ Listen
InformationsquelleAutor der Antwort pufferfish
&Amp; - operator nimmt die Schnittmenge zweier sets.
{1, 2, 3} & {2, 3, 4}
Aus[1]: {2, 3}
InformationsquelleAutor der Antwort aflaisler
Einen pythonic Weg der Kreuzung von 2 Listen:
InformationsquelleAutor der Antwort Flying_ostrich
Sollten Sie reduzieren mit diesem code ( aus http://kogs-www.informatik.uni-hamburg.de/~meine/python_tricks ), der code ist ungetestet, aber ich bin mir ziemlich sicher, dass es funktioniert:
Nachdem Sie hatten abgeflacht der Liste, führen Sie die Kreuzung in der üblichen Weise:
InformationsquelleAutor der Antwort Geo
Seit
intersect
definiert wurde, eine grundlegende Liste Verständnis ist genug:Verbesserung Dank S. Lott ' s Bemerkung und TM.'s verbunden Bemerkung:
InformationsquelleAutor der Antwort Emmanuel
Gegeben:
Ich finde, der folgende code funktioniert gut und vielleicht übersichtlicher, wenn die Verwendung der mengenoperation:
Bekam:
Wenn die Bestellung benötigt:
wir haben:
Durch die Art und Weise, für einen mehr-python-Stil, dieser ist auch fein:
InformationsquelleAutor der Antwort Steven
Halten Sie
[1,2]
zu schneiden mit[1, [2]]
? Das heißt, es ist nur die zahlen, die Sie interessieren, oder die Struktur der Liste?Wenn nur die zahlen, zu untersuchen, wie "glätten", die Listen, dann verwenden Sie die
set()
Methode.InformationsquelleAutor der Antwort unwind
Ich weiß nicht, ob ich zu spät in deine Frage zu beantworten. Nach dem Lesen deiner Frage habe ich eine Funktion intersect (), die auf der Liste und der verschachtelten Liste. Ich verwendet Rekursion, um zu definieren, diese Funktion, ist es sehr intuitiv. Hoffe, es ist das, was du suchst:
Beispiel:
InformationsquelleAutor der Antwort Mrsky Boatin
Ich war auch auf der Suche nach einem Weg, es zu tun, und schließlich endete es so:
InformationsquelleAutor der Antwort Remco van Zuijlen
Definieren Kreuzung, korrekt berücksichtigt die Kardinalität der Elemente verwenden
Counter
:InformationsquelleAutor der Antwort James Hirschorn
InformationsquelleAutor der Antwort user3105897
Wir können set-Methoden für diese:
InformationsquelleAutor der Antwort Birendra Kumar
Hier ist eine Möglichkeit, um
c3
die nicht die Sätze:Aber wenn Sie lieber nur eine Zeile, können Sie dies tun:
Es ist eine list comprehension in einer Liste Verständnis, das ist ein wenig ungewöhnlich, aber ich denke, Sie sollten sich nicht allzu viel Mühe, ihn zu verfolgen.
InformationsquelleAutor der Antwort J-L
Für mich ist das eine sehr elegante und schnelle Art und Weise 🙂
InformationsquelleAutor der Antwort Michal