Estoy usando Python 3.2.3. ¿Cuál es la forma más rápida de iterar sobre una lista al revés? [:: - 1], invertido, list.reverse() o tal vez de alguna otra manera? Estoy lidiando con una lista de aproximadamente 5e6 elementos más o menos, así que realmente necesito evitar copiar la lista.Necesito iterar en una lista de Python al revés lo más rápido posible
Respuesta
>>> from timeit import Timer
>>> t = Timer('[x for x in l[::-1]]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
5.549649953842163
>>> t = Timer('l.reverse(); [x for x in l]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
4.548457145690918
>>> t = Timer('[x for x in reversed(l)]', 'l = list(range(100000))')
>>> t.timeit(number=1000)
4.428632974624634
Conclusión: invertida() es marginalmente más rápido que l.reverse() en una lista con 100000 elementos. Esto, por supuesto, es aún más cierto si no buclea toda la lista, y deja de ser cierto si utiliza la lista más de una vez.
l[::-1]
está desactualizado desde el 2.4 que introdujo reversed()
.
reversed
debe ser el mejor ya que devuelve un iterador, por lo que no copia la lista, solo cede un elemento a la vez. (list.reverse()
también no copiará la lista, pero va a mutar, así que la lista será al revés después de que haya terminado, mientras que reversed
no modifica la lista original.)
Tenga en cuenta que los iteradores no * necesariamente * impiden la copia, simplemente funciona en este caso. –
Eso es cierto, pero en general las funciones incorporadas de python que proporcionan iteradores no construyen toda la lista a la vez; ese es todo el sentido de ellos. – BrenBarn
- 1. Cómo crear CreateFile lo más rápido posible
- 2. lista de Python serialización - método más rápido
- 3. ¿Es posible curry al revés en Scala?
- 4. Borrar un BufferedImage transparente lo más rápido posible
- 5. Iterar una lista con índices en Python
- 6. Python es lento al iterar sobre una lista grande
- 7. (Python) Contar líneas en un enorme (> 10 GB) presentar lo más rápido posible
- 8. Necesito iterar y contar. ¿Qué es más rápido o preferido: ToArray() o ToList()?
- 9. ¿Por qué iterar sobre una Lista sería más rápido que indexar a través de ella?
- 10. ¿Es posible reproducir video HTML5 al revés?
- 11. ¿Cómo leer una lista unida de forma simple al revés?
- 12. os.walk() al revés?
- 13. ¿Cuál es la forma más eficiente de iterar a través de una lista en python?
- 14. ¿Tiene C# /. Net x.x una implementación de una lista doblemente enlazada (que puede repetirse al revés)?
- 15. ¿Es Linq más rápido, más lento o lo mismo?
- 16. partido de lista en Python: obtener índices de una sub-lista en una lista más grande
- 17. ¿Iterar más de * args?
- 18. Cómo iterar sobre una lista repitiendo cada elemento en Python
- 19. ¿Es posible hacer este script de shell más rápido?
- 20. ¿Cuál es el método más rápido/más seguro para iterar sobre un HashSet?
- 21. Navegar por una gran base de código Python más rápido
- 22. ¿Hay alguna manera fácil de iterar en un NSArray al revés?
- 23. selectivo entrar en casandra más rápido de lo normal obtener?
- 24. Escribiendo un Python Spider más rápido
- 25. La forma más rápida de unificar una lista en Python
- 26. ¿Necesito node.js en Python como lo haría con PHP?
- 27. Cythonize una función de Python para hacerlo más rápido
- 28. ¿Cómo llamo jQuery.slideDown() al revés?
- 29. ¿Añadir más especificidad a una consulta SELECT lo haría más rápido?
- 30. Apache, mod_ *, PHP, Perl, Python, Ruby; Aprendiendo al revés
Debe probarlo usted mismo. Te recomiendo que revises el módulo ['timeit'] (http://docs.python.org/library/timeit.html). –