Das funktioniert auch:
zip(*elements)[1]
(Ich poste dies hauptsächlich, um mir selbst zu beweisen, dass ich gescheitert bin zip
...)
Sehen Sie es in Aktion:
>>> help(zip)
Hilfe auf eingebaute Funktion zip in Modul builtin :
Postleitzahl(...)
zip (seq1 [, seq2 [...]]) -> [(seq1 [0], seq2 [0] ...), (...)]
Gibt eine Liste von Tupeln zurück, wobei jedes Tupel das i-te Element aus jeder der Argumentsequenzen enthält. Die zurückgegebene Liste wird auf die Länge der kürzesten Argumentsequenz gekürzt.
>>> elements = [(1,1,1),(2,3,7),(3,5,10)]
>>> zip(*elements)
[(1, 2, 3), (1, 3, 5), (1, 7, 10)]
>>> zip(*elements)[1]
(1, 3, 5)
>>>
Ordentlich, was ich heute gelernt habe: Verwenden Sie *list
Argumente, um eine Parameterliste für eine Funktion zu erstellen ...
Hinweis : Gibt in Python3 zip
einen Iterator zurück. Verwenden Sie ihn stattdessen list(zip(*elements))
, um eine Liste von Tupeln zurückzugeben.
**dict
, um Schlüsselwortargumente zu erstellen:def test(foo=3, bar=3): return foo*bar
dannd = {'bar': 9, 'foo'=12}; print test(**d)
Es geht auch anders. Sie können dies auch mit map und itemgetter tun :
Dies führt jedoch intern immer noch eine Schleife durch und ist etwas langsamer als das Listenverständnis:
Ergebnisse:
Wenn Sie eine Liste durchlaufen müssen, ist die Verwendung von a
for
in Ordnung.quelle
Ich habe dies gefunden, als ich nach dem Weg gesucht habe, auf dem das zweite Element einer 2-Tupel-Liste am schnellsten abgerufen werden kann. Nicht das, was ich wollte, aber ich habe den gleichen Test wie mit einer dritten Methode durchgeführt und die Zip-Methode getestet
Also mehr als doppelt so schnell, wenn Sie ein 2-Tupel-Paar haben, um es einfach in ein Diktat umzuwandeln und die Werte zu übernehmen.
quelle
dict(elements).values()
dass dies zu einem Diktat mit einem Element führen wird, im Gegensatz zu Listenverständnis oder Karte. Dies ist genau das, was ich wollte (ich war an einzigartigen Toupples interessiert) (+1 und großes Dankeschön für das Posten), aber andere fragen sich vielleicht, warum das Diktat schneller ist - es ordnet keinen Speicher zu, sondern prüft nur das vorhandene Element.Timings für Python 3.6 zum Extrahieren des zweiten Elements aus einer 2-Tupel-Liste.
Außerdem wurde eine
numpy
Array-Methode hinzugefügt , die einfacher zu lesen ist (aber wohl einfacher als das Listenverständnis).und die Zeiten:
Beachten Sie dies
map()
undzip()
geben Sie keine Liste mehr zurück, daher die explizite Konvertierung.quelle
quelle
Verwenden von
islice
undchain.from_iterable
:Dies kann nützlich sein, wenn Sie mehr als ein Element benötigen:
quelle