("dezip" ist offensichtlich ein schlechter Name, aber ich bin mir nicht sicher, was der richtige wäre. Bitte entschuldigen Sie, wenn ich eine autoritative Antwort verpasst habe, weil ich nicht weiß was suchen)most pythonon3 dezip (?) Implementation
Lasst uns sagen, dass wir
people = [
(1, 'anne'),
(2, 'ben'),
(3, 'charlie'),
]
(gemeinsam in django für Wahlen etc.)
Jetzt wollen wir eine Liste der „Schlüssel“ oder eine Liste der ersten Elemente haben. [1, 2, 3]
In Python 3 Ich verwende
people_ids, _ = list(zip(*people))
# or even
people_ids = [p[0] for p in people]
Der Zip Weg scheint nicht sehr sauber, vor allem mit den zusätzlichen list(...)
von Python 3 Herstellung erforderlich zip einen Iterator.
Der zweite Verständnisansatz ist etwas besser lesbar, würde aber auch nicht verallgemeinern, z. Rückhollisten der zweiten, dritten Elemente usw. im selben Aufruf.
Gibt es einen besseren Weg?
(wobei „besser“ bedeutet vor allem sauber und gut lesbar, aber die Leistung könnte auch einige erhebliche)
_Der zweite Verständnisansatz ist etwas besser lesbar, würde aber nicht verallgemeinern, z. Rücksende-Listen der zweiten, dritten Elemente etc._ warum wird es nicht? Übergeben Sie eine einzelne Zahl, es wird ein einzelnes Element zurückgegeben. Übergeben Sie es an ein Scheibenobjekt, es wird ein Stück der ursprünglichen Scheibenliste zurückgegeben. Es sieht nach einer netten und sauberen Lösung aus. –
Lassen Sie uns sagen, wir wollen 'people_ids, people_names = [???]' kann nicht in einem lesbaren Verständnis AFAIK getan werden. Aber vielleicht hast du recht, wenn du nur einen Satz von Elementen willst, sei klar und schreibe das Verständnis auf. – SColvin
aktualisiert, um zu verdeutlichen, was ich unter "zweite, dritte Elemente" verstehe – SColvin