2011-07-08 64 views

Respuesta

6

Otra solución:

for item in L[::-1]: 
    print item 
+2

Tenga en cuenta que esto creará temporalmente una copia invertida de la secuencia, mientras que 'reverse()' solo lo copiará si es necesario. –

+2

+3 para crear una copia? Lo siento pero esto merece un -3 –

+0

'L [:: - 1]:' ejecutar más rápido que 'revertir (L)' –

16

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.

7

Invierta la secuencia.

L = [1,2,3] 
for item in reversed(L) 
    print item #-->3,2,1 
3

Sé que este hilo es ahora años de edad, pero un comentario debajo de la respuesta aceptada contiene la afirmación de que el uso de [::-1] es más rápido que usar reversed(). Esto solo es cierto si su lista se coloca explícitamente en la memoria, que es no necesaria al hacer una cuenta regresiva. De lo contrario, es más lento:

>>> timeit.Timer(stmt="range(1,1000)[::-1]").timeit() 
10.801303316066111 
>>> timeit.Timer(stmt="list(reversed(xrange(1,1000)))").timeit() 
9.484562358901144 

... y [::-1] utiliza más espacio que reversed.

+0

En mi computadora 'reversed' es más rápido incluso para las listas que ya están en la memoria. (Vea los tiempos en mi respuesta editada). – senderle

Cuestiones relacionadas