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/