Frage ich mich, was ist der beste Weg, zu extrahieren, eine erste Element jeder Teilliste in eine Liste von Listen und hängen Sie es an eine neue Liste. Also wenn ich habe:
lst = [[a,b,c], [1,2,3], [x,y,z]]
und ich wollen, ziehen Sie a, 1 und x, und erstellen Sie eine separate Liste von denen.
Habe ich versucht:
lst2.append(x[0] for x in lst)
InformationsquelleAutor der Frage konrad | 2014-07-31
Mithilfe list comprehension:
InformationsquelleAutor der Antwort alecxe
Könnten Sie zip:
Oder Python 3, wo
zip
nicht produzieren eine Liste:Oder,
Oder (mein Favorit) verwenden, numpy:
InformationsquelleAutor der Antwort dawg
Python enthält eine Funktion namens itemgetter Rückkehr das Element an einem bestimmten index in einer Liste:
Pass die itemgetter () - Funktion den index des Elements, das Sie abrufen möchten. , Um das erste Element, die Sie verwenden würden, itemgetter(0). Die wichtige Sache zu verstehen ist, dass itemgetter(0) sich selbst gibt, eine Funktion. Wenn Sie übergeben eine Liste mit dieser Funktion bekommen Sie den bestimmten Artikel:
Dies ist nützlich, wenn Sie es kombinieren mit map(), die eine Funktion als erstes argument und eine Liste (oder andere durchsuchbar) als zweites argument. Er gibt das Ergebnis des Aufrufs der Funktion auf jedes Objekt in der iterierbar:
Beachten Sie, dass anzeigen() liefert ein generator, so das Ergebnis übergeben wird, Liste (), um eine aktuelle Liste. In der Zusammenfassung, Ihre Aufgabe könnte wie folgt vorgenommen:
Dies ist eine alternative Methode, um mit Hilfe einer Liste Verständnis, und welche Methode Sie wählen, hängt stark davon ab, Kontext, Lesbarkeit und Vorlieben.
Mehr info:
https://docs.python.org/3/library/operator.html#operator.itemgetter
InformationsquelleAutor der Antwort Christian Abbott
Hatte das gleiche Problem und habe neugierig die Leistungsfähigkeit der jeweiligen Lösung.
Hier ist der
%timeit
:Den ersten numpy-Weg, die Umwandlung der array:
Nativ mit list comprehension (wie bereits von @alecxe):
Anderen einheimischen Art mit
zip
(wie bereits von @dawg):Zweiten numpy-Weg. Auch erklärt @dawg:
Überraschend (zumindest für mich) den nativen Weg mit list comprehension ist die Schnellste und etwa 10x schneller als die numpy-Weg. Laufen die beiden numpy-Möglichkeiten ohne die Letzte
list
spart etwa einer ľs, die noch in 10x Unterschied.Beachten Sie, dass, wenn ich umgeben jedes Codefragment durch einen Aufruf
len
um sicherzustellen, dass Generatoren laufen bis zum Ende, das timing ist gleich geblieben.InformationsquelleAutor der Antwort jboi
Dein code ist fast richtig. Das einzige Problem ist die Verwendung von list comprehension.
Wenn Sie verwenden wie: (x[0] for x in lst), es gibt ein generator-Objekt.
Wenn Sie verwenden möchten: [x[0] for x in lst], es gibt eine Liste.
Wenn Sie fügen Sie die list-comprehension-Ausgabe einer Liste, die Ausgabe der list-comprehension ist das einzige element der Liste.
lst2 = [['a', 1, 'x']]
lst2[0] = ['a', 1, 'x']
Bitte lassen Sie mich wissen, wenn ich bin falsch.
InformationsquelleAutor der Antwort Abhishek Mittal
Ausgabe:
['a', 1, 'x']
InformationsquelleAutor der Antwort PrabhuPrakash
Sagte Sie, dass Sie eine vorhandene Liste. Also ich gehe mit, dass.
Jetzt sind Sie, indem der generator-Objekt zu deiner zweiten Liste.
Aber Sie wahrscheinlich wollen, dass es eine Liste der ersten Elemente
Wir nun angefügt die Liste der ersten Elemente der vorhandenen Liste. Wenn Sie möchten, fügen Sie die Elemente, die themeselves, nicht eine Liste von Ihnen, um die bisherigen, die Sie verwenden würden, Liste.verlängern. In diesem Fall werden wir nicht haben, um sorgen über das hinzufügen von ein generator, denn verlängern, wird dieser generator für jedes Element hinzuzufügen, wird es von dort aus zu erweitern die aktuelle Liste.
oder
https://docs.python.org/3.4/tutorial/datastructures.html#more-on-lists
https://docs.python.org/3.4/tutorial/datastructures.html#list-comprehensions
InformationsquelleAutor der Antwort Hendrik