Actualización : Aplanar usando extender pero sin comprensión y sin usar la lista como iterador (más rápido)
Después de verificar la siguiente respuesta a esto que proporcionó una solución más rápida a través de una comprensión de lista dual for
, hice un pequeño ajuste y ahora funciona mejor, primero la ejecución de la lista (...) fue arrastrando un gran porcentaje de tiempo, luego cambiando una lista la comprensión de un bucle simple también se afeitó un poco más.
La nueva solución es:
l = []
for row in output: l.extend(row)
Mayor:
Aplanamiento con mapa / extender:
l = []
list(map(l.extend, output))
Acoplamiento con comprensión de lista en lugar de mapa
l = []
list(l.extend(row) for row in output)
algún tiempo es para una nueva extensión y la mejora obtenida simplemente eliminando la lista (...) para [...]:
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)]
ya es una matriz de 3x2!? o me perdí algo?