mehrere Variablen in der Liste Verständnis?
Ich möchte eine Liste erstellen von Listen aus einer Liste von multi-Feld-strings und Frage mich, ob es möglich ist in ein Verständnis.
Eingang:
inputs = ["1, foo, bar", "2, tom, jerry"]
Gewünschte Ausgabe:
[[1, "foo", "bar"], [2, "tom", "jerry"]]
Aufteilung der Zeichenkette in ein verstehen ist einfach:
>>> [s.split(",") for s in inputs]
[['1', ' foo', ' bar'], ['2', ' tom', ' jerry']]
Aber ich habe Schwierigkeiten, herauszufinden, wie der Zugriff auf Spalten nachdem der string aufgeteilt wurde innen das Verständnis, denn es wäre zu erfordern scheinen, dass eine variable Zuordnung. Die folgenden sind nicht gültig Python, aber veranschaulichen, was ich Suche:
[[int(x), y.strip(), z.strip() for x,y,z = s.split(",")] for s in inputs]
or
[[int(v[0]), v[1].strip(), v[2].strip() for v = s.split(",")] for s in inputs]
Gibt es eine Möglichkeit zum zuweisen von Variablen innerhalb eines Verständnisses, so dass die Ausgabe besteht aus Funktionen, Variablen? Eine Schleife ist trivial, aber die Erstellung einer Liste durch die Umwandlung Eingänge scheint sicher, dass ein "Verständnis-ish" Aufgabe.
outputs = []
for s in inputs:
x,y,z = s.split(",")
outputs.append([int(x), y.strip(), z.strip()])
[['1', ' foo', ' bar'], ['2', ' tom', ' jerry']]
, lst[0][0]
wäre 1
, lst[0][1]
wäre foo
und so weiter. Wenn Sie Variablen, die Sie wahrscheinlich benötigen, um Sie zu speichern als maps mit der Tastatur.[ ... for x, y, z in (s.split(', ') for s in inputs)]
InformationsquelleAutor Dave | 2016-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies mit zwei
for
- Klauseln in der Liste erfassen. Die erste iteriert über die Elemente in der Liste. Die zweite durchläuft eine single-item-Liste mit der Liste abgeleitet, die aus der Spaltung der string (die wird benötigt, damit wir Auspacken können dieses in drei getrennte Variablen).Den
for
- Klauseln gehen in einem nicht ganz eingängig um, aber es stimmt, so würden Sie es schreiben als geschachteltefor
Schleifen.Jon Sharpe, die Verwendung eines geschachtelten Verständnis (generator-Ausdruck eigentlich) ist ähnlich und wahrscheinlich klarer. Die Verwendung von mehreren
for
Klauseln immer scheint verwirrend für mich; vor allem wollte ich sehen, wenn ich könnte machen, verwenden Sie es hier.InformationsquelleAutor kindall
Können Sie anzeigen mit einer Liste Verständnis
mit einer lambda-Funktion:
InformationsquelleAutor user2314737
Wenn Sie wirklich wollen, es zu tun in einer Linie, können Sie so etwas tun, obwohl es nicht der sauberste code (erste Zeile ist der code, die zweite Zeile der Ausgabe).
Oder.
Bearbeiten:
Sehen jonrsharpe Kommentar für die beste Lösung IMHO.
InformationsquelleAutor yper
Danke für die vielen Anregungen - es ist toll zu sehen, die Vielfalt der möglichen Techniken, als auch als Gegenbeispiel zu den zen of Python ' s "Es sollte einen — und möglichst nur einen — offensichtlichen Weg, es zu tun."
Alle 4 Lösungen sind gleich schön, so ist es ein bisschen unfair zu haben, um das begehrte grüne Häkchen, um nur eine von Ihnen. Ich Stimme mit den Empfehlungen, die #1 ist die sauberste und beste Ansatz. #2 ist auch einfach zu verstehen, aber mit einer lambda-innen ein Verständnis scheint ein bisschen ab. #3 ist schön, erstellen einen iterator mit Karte, aber bekommt einen kleinen demerit für die Notwendigkeit, den zusätzlichen Schritt des Durchsuchens. #4 ist cool für den Hinweis, dass verschachtelte for-s möglich sind -- wenn ich mich erinnere, gehen Sie in "Erster, zweiter", um anstelle von "innen, außen". Da #1 ist nicht in der form einer Antwort #4 bekommt den Scheck für die meisten überraschend.
Vielen Dank nochmal an alle.
Ergebnisse:
InformationsquelleAutor Dave
Anderen Lösung
InformationsquelleAutor shaktimaan