while for español ejemplos contador ciclo bucle anidado python list-comprehension

python - español - ¿Cuál es la ventaja de una lista de comprensión sobre un bucle for?



for i in range python español (1)

¿Cuál es la ventaja de utilizar una lista de comprensión sobre un bucle for en Python?

¿Es principalmente para que sea más humanamente legible, o hay otras razones para usar una lista de comprensión en lugar de un bucle?


Las listas de comprensión son más compactas y rápidas que un ciclo explícito for construir una lista:

def slower(): result = [] for elem in some_iterable: result.append(elem) return result def faster(): return [elem for elem in some_iterable]

Esto es porque llamar a .append() en una list hace que el objeto de la lista crezca (en fragmentos) para hacer espacio para nuevos elementos individualmente, mientras que la comprensión de la lista reúne todos los elementos antes de crear la list para ajustar los elementos de una vez:

>>> some_iterable = range(1000) >>> import timeit >>> timeit.timeit(''f()'', ''from __main__ import slower as f'', number=10000) 1.4456570148468018 >>> timeit.timeit(''f()'', ''from __main__ import faster as f'', number=10000) 0.49323201179504395

Sin embargo, esto no significa que deba comenzar a usar listas de comprensión para todo. Una lista de comprensión seguirá construyendo un objeto de lista ; Si está utilizando una lista de comprensión solo porque le da un ciclo de una sola línea, piense de nuevo. Probablemente esté desperdiciando ciclos creando un objeto de lista que luego descarte nuevamente. Simplemente manténgase en un bucle for normal en ese caso.