Das Verfahren nennt man transponieren:
https://de.wikipedia.org/wiki/Transponierte_Matrix
Wird z.B. auch bei Excel oft angewandt.
Kleine Ergänzung für Python 3.10:
https://docs.python.org/3/library/functions.html#zip
Code: Alles auswählen
# zu wenig Elemente in der letzten Liste
data = [[1, 1, 1, 1], [2, 2, 2, 2], [3]]
data_t = list(zip(*data, strict=True))
ValueError: zip() argument 3 is shorter than arguments 1-2
Wenn man noch eine ältere Python-Version als 3.10 nutzt, kann man
strict nicht verwenden.
Ohne
strict werden die anderen Elemente auch einfach ausgelassen und dann bekommt man so etwas als Ergebnis:
[(1, 2, 3)]
Wären in der letzten Liste 2 Elemente gewesen, hätte man zwei Tupel in der Liste.
Wenn es wichtig ist, dass alle Elemente verarbeitet werden und die fehlenden durch ein Platzhalter-Objekt ersetzt werden, kann man zip_longest verwenden.
https://docs.python.org/3/library/itert ... ip_longest
Code: Alles auswählen
from itertools import zip_longest
# zu wenig Elemente in der letzten Liste
data = [[1, 1, 1, 1], [2, 2, 2, 2], [3]]
data_t = list(zip_longest(*data))
print(data_t)
[(1, 2, 3), (1, 2, None), (1, 2, None), (1, 2, None)]
Durch das Argument
fillvalue wird automatisch None vorgegeben, dass man ändern kann:
Code: Alles auswählen
from itertools import zip_longest
# zu wenig Elemente in der letzten Liste
data = [[1, 1, 1, 1], [2, 2, 2, 2], [3]]
data_t = list(zip_longest(*data, fillvalue="fehlt"))
print(data_t)
[(1, 2, 3), (1, 2, 'fehlt'), (1, 2, 'fehlt'), (1, 2, 'fehlt')]
Bei der Weiterverarbeitung der Liste muss dann natürlich die Ausnahme behandelt werden, dass "fehlt" z.B. einfach übersprungen werden soll.
Ich hoffe, das war nicht zu viel des Guten...
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server