Batteries included.
for i in reversed([1, 2, 3]):
print i
Cortando la lista (ls[::-1]
) es grande para hacer una copia invertido, pero en mi máquina es más lento para la iteración, incluso si la lista ya está en la memoria:
>>> def sliceit(x):
... l = range(x)
... for i in l[::-1]:
... i
...
>>> def reverseit(x):
... l = range(x)
... for i in reversed(l):
... i
...
>>> %timeit sliceit(100)
100000 loops, best of 3: 4.04 µs per loop
>>> %timeit reverseit(100)
100000 loops, best of 3: 3.79 µs per loop
>>> %timeit sliceit(1000)
10000 loops, best of 3: 34.9 µs per loop
>>> %timeit reverseit(1000)
10000 loops, best of 3: 32.5 µs per loop
>>> %timeit sliceit(10000)
1000 loops, best of 3: 364 µs per loop
>>> %timeit reverseit(10000)
1000 loops, best of 3: 331 µs per loop
Como suele suceder en casos como estos , la diferencia es bastante insignificante. Puede ser diferente para diferentes versiones de Python (utilicé Python 2.7 para la prueba anterior). El beneficio real de utilizar reversed
es la legibilidad, sería preferible en la mayoría de los casos, incluso si le costó un par de microsegundos adicionales.
Tenga en cuenta que esto creará temporalmente una copia invertida de la secuencia, mientras que 'reverse()' solo lo copiará si es necesario. –
+3 para crear una copia? Lo siento pero esto merece un -3 –
'L [:: - 1]:' ejecutar más rápido que 'revertir (L)' –