Während zip(*seq)
sehr nützlich ist, kann es für sehr lange Sequenzen ungeeignet sein, da es ein Tupel von Werten erzeugt, die übergeben werden müssen. Ich habe zum Beispiel mit einem Koordinatensystem mit über einer Million Einträgen gearbeitet und finde es wesentlich schneller, die Sequenzen direkt zu erstellen.
Ein allgemeiner Ansatz wäre etwa so:
from collections import deque
seq = ((a1, b1, …), (a2, b2, …), …)
width = len(seq[0])
output = [deque(len(seq))] * width # preallocate memory
for element in seq:
for s, item in zip(output, element):
s.append(item)
Aber je nachdem, was Sie mit dem Ergebnis machen wollen, kann die Wahl der Sammlung einen großen Unterschied machen. In meinem konkreten Anwendungsfall ist die Verwendung von Sets und keiner internen Schleife deutlich schneller als alle anderen Ansätze.
Und wie andere bereits angemerkt haben, könnte es sinnvoll sein, stattdessen Numpy- oder Pandas-Sammlungen zu verwenden, wenn Sie dies mit Datensätzen tun.
8 Stimmen
Tolle Antworten unten, aber sehen Sie sich auch an Numpys Transponieren
5 Stimmen
Siehe diese nette Antwort, um dasselbe mit Generatoren anstelle von Listen zu tun: wie-entpacke-einen-iterator
0 Stimmen
Warum wird zip als Transponierung bezeichnet?