Primordialmente debe decidir, si necesita generador, esto también tiene un método mejorado. Como generador de listas "[elem for elem in somethink]". Y los generadores se recomiendan si solo usa valor en la lista para algunas operaciones. Pero si necesita una lista para muchos cambios y trabaja con muchos elementos al mismo tiempo, esta debe ser una lista. (Al igual que el 70% de las veces si la lista de uso del programador es estándar, mejor será el generador.usa menos memoria, solo mucha gente simplemente no ve otra forma de lista. Desafortunadamente en nuestra época, muchas personas hacen pis en la buena optimización, y simplemente lo hacen para trabajar).
Si usa el generador para la lista para mejorar el rendimiento, hagamos lo mismo con los tipos de rendimiento. De todos modos, tenemos varios métodos más optimizados para todas las acciones en el lenguaje de programación Python.
El rendimiento es más rápido que el rendimiento, y lo demostraré. Sólo tienes que comprobar estos chicos:
data = range(1000)
def yielder():
yield from data
def appending():
L = []
app = list.append
for i in data:
app(L, i)
return L
def list_gen():
return [i for i in data]
Por supuesto anexar será más lento que otras ideas, lástima pues creamos y lista de extender cualquier momento bucle. Solo el ciclo "para" está muy desoptimizado, si puedes evitarlo, hazlo. Porque en cualquier paso esta función carga el siguiente elemento y escribe nuestra variable, para obtener este valor de objeto en la memoria. Así que saltamos a cualquier elemento, creamos una referencia, ampliamos la lista en bucle (el método declarado es el optymalizer de gran velocidad), cuando generamos solo el retorno, el resumen tiene 2000 elementos en dos listas.
list_gen es menos memoria, simplemente devolvemos elementos, pero al igual que arriba, generamos una segunda lista. Ahora tenemos dos listas, datos originales y su copia. Resumen 2000 elementos. Simplemente evitamos el paso con crear referencia a la variable. Porque nuestro gen en las listas evita este paso. Solo escribe elementos.
use la menor memoria posible, ya que solo obtuvimos valor de los datos. Evitamos una referencia. Por ejemplo:
data = range(1000)
def yielder():
yield from data
def list_gen():
return [i for i in data]
#Now we generate next reference after line [i for i in data]
for i in list_gen():
#some instruction
#This is our first reference, becouse was yield from data.
for i in yielder():
#some instruction
Usar sólo un elemento de una cierta instrucción, no todos de la lista, al lado de un valor productora volverá al siguiente bucle, no todas revista 1000 elementos para escribir en referencia.
Srry por poco tema de excavación, justo cuando accidentalmente vino una cruz de búsqueda de google, otros principiantes programadores de pitón pueden ver esta tontería.
¿_lazy_ significa _bajo requisito de memoria_? – Kit
Escribí un compresor/descompresor para el algoritmo WKdm. Después de perfilar una función que descomprime los bits en una lista fue la más lenta. Lo convertí en un generador y fue aún más lento. La versión de rendimiento proporcionó aproximadamente 22 MB/s, y la versión adjunta proporcionó aproximadamente 38 MB/s. Entonces, realmente depende de lo que estés haciendo. – Christopher
la búsqueda 'lst.append' puede ralentizar' anexar() '. Puede intentarlo con 'append = lst.append' fuera del ciclo. – jfs