¿Las listas por comprensión en Python se reducen de una manera eficiente en la memoria?

StackOverflow https://stackoverflow.com/questions/5349755

  •  27-10-2019
  •  | 
  •  

Pregunta

Soy un principiante en Python, y esta es mi primera publicación, así que no seas demasiado duro :).He estado jugando con Python últimamente y me preguntaba si algo como

max([x for x in range(25)]) 

daría como resultado que Python primero creara una lista de todos los elementos y luego encontrara el máximo, lo que daría como resultado un tiempo O (2n), o realizaría un seguimiento del máximo ya que estaba iterando para Θ (n).Además, dado que el rango difiere en Python3 (siendo iterable), ¿eso lo haría diferente al de Python2?

¿Fue útil?

Solución

Su ejemplo dará como resultado que Python construya primero la lista completa.Si desea evitar eso, puede usar una expresión generadora en su lugar:

max((x for x in range(25)))

o simplemente:

max(x for x in range(25))

Por supuesto (en Python 2), range en sí mismo crea una lista completa, así que lo que realmente desea en este caso es:

max(x for x in xrange(25))

Sin embargo, con respecto al tiempo necesario, todas estas expresiones tienen la misma complejidad.La diferencia importante es que el último requiere O (1) espacio, mientras que los otros requieren O (n) espacio.

Otros consejos

Las listas por comprensión siempre generan una lista (a menos que algo arroje una excepción).En su lugar, se recomienda el uso de un genex en la mayoría de los casos.

max(x for x in xrange(25))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top