Update : Abflachung mit Extend, aber ohne Verständnis und ohne Verwendung von List als Iterator (am schnellsten)
Nachdem dual for
ich die nächste Antwort auf diese Frage überprüft hatte, die über ein Listenverständnis eine schnellere Lösung ermöglichte, nahm ich eine kleine Änderung vor und jetzt ist die Leistung besser. Zuerst zog die Ausführung der Liste (...) einen großen Prozentsatz der Zeit in Anspruch und änderte dann eine Liste Das Verständnis für eine einfache Schleife hat sich ebenfalls etwas mehr rasiert.
Die neue Lösung lautet:
l = []
for row in output: l.extend(row)
Älter:
Abflachen mit Karte / Erweitern:
l = []
list(map(l.extend, output))
Abflachung mit Listenverständnis anstelle von Karte
l = []
list(l.extend(row) for row in output)
Einige Zeitpunkte für neue Erweiterungen und die Verbesserung, die durch einfaches Entfernen der Liste (...) für [...] erzielt wurde:
import timeit
t = timeit.timeit
o = "output=list(zip(range(1000000000), range(10000000))); l=[]"
steps_ext = "for row in output: l.extend(row)"
steps_ext_old = "list(l.extend(row) for row in output)"
steps_ext_remove_list = "[l.extend(row) for row in output]"
steps_com = "[item for sublist in output for item in sublist]"
print("new extend: ", t(steps_ext, setup=o, number=10))
print("old extend w []: ", t(steps_ext_remove_list, setup=o, number=10))
print("comprehension: ", t(steps_com, setup=o, number=10,))
print("old extend: ", t(steps_ext_old, setup=o, number=10))
>>> new extend: 4.502427191007882
>>> old extend w []: 5.281140706967562
>>> comprehension: 5.54302118299529
>>> old extend: 6.840151469223201
[(12.2817, 12.2817), (0, 0), (8.52, 8.52)]
ist schon eine 3x2 Matrix !? oder habe ich etwas verpasst?