Podrías utilizar buffer (memoryview en Python 3)...
Cortar es trivial, volver a empalmar no tanto aunque quizás
puedas hacer un wrapper e implementar el pegado en forma
virtual.

O directamente array.

Hernán M. Foffani





El 05/08/2013, a las 21:54, Chema Cortes <pych...@gmail.com> escribió:

> Últimamente, estoy realizando estudios sobre la eficiencia de
> distintos códigos python. Mirando qué tipo de colección podía ser más
> eficiente según qué tareas, me encuentro con el siguiente párrafo en
> la documentación de ["deque"][1]:
> 
> "Deques support thread-safe, memory efficient appends and pops from
> either side of the deque with approximately the same O(1) performance
> in either direction.
> 
> Though list objects support similar operations, they are optimized for
> fast fixed-length operations and incur O(n) memory movement costs for
> pop(0) and insert(0, v) operations which change both the size and
> position of the underlying data representation."
> 
> He comprobado que, efectivamente, el costo de insertar elementos al
> principio de una lista es mucho mayor que añadir elementos al final de
> la lista (x10000).
> 
> En estos momentos , necesito trabajar con listas de números muy largas
> (> 10e6 elementos) para trocear en dos pedazos, invertir uno de ellos
> y volverlos a empalmar (método "2-opt"). Una forma de expresarlo:
> 
>   L[i+1:j+1] = L[j:i:-1]   con i+1<j
> 
> que equivale a:
> 
>   L[:i] + L[j:i:-1] + L[j+1:]
> 
> Esta última expresión, aunque más clara, es poco eficiente al tener
> que crear una nueva lista partiendo de tres sublistas intermedias.
> 
> Los elementos no cambian de valor y tampoco cambia el tamaño de la
> lista. Parece que la "lista" es la estructura más eficiente para esta
> tarea (por lo que cuenta la documentación) siempre que no se modifique
> en tamaño. Pero me pregunto si hay algún modo de hacer este manejo más
> eficiente, tal vez usando alguna otra estructura, en python o numpy,
> que mejore estas tareas de corte y empalme. Intuyo que con "arrays" se
> reducen las necesidades de memoria, pero en estos momentos, la memoria
> es lo que menos me preocupa. Busco un método genérico que pueda valer
> para cualquier otro tipo de datos (eg: lista de vectores).
> 
> 
> 
> 
> [1]: http://docs.python.org/2/library/collections.html#collections.deque
> 
> 
> -- 
> Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
> http://ch3m4.org/blog
> Buscador Python Hispano: http://ch3m4.org/python-es
> _______________________________________________
> Python-es mailing list
> Python-es@python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/

_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a