Estoy trabajando en un script para una pieza de software, y realmente no me da acceso directo a los datos que necesito. En cambio, necesito pedir cada información que necesito y crear una lista de los datos que obtengo. Por diversas razones, necesito que se ordene la lista. Es muy fácil construir la lista una sola vez, y luego ordenarla, seguido de hacer cosas con ella. Sin embargo, supongo que sería más rápido ejecutar todo una vez, en lugar de compilar la lista y luego ordenarla.¿Puedo crear una lista y ordenarla al mismo tiempo?
Así, en el momento en que he básicamente tengo esto:
my_list = []
for item in "query for stuff":
my_list.append("query for %s data" % item)
my_list.sort()
do_stuff(my_list)
El bit de "consulta de cosas" es la interfaz de consulta con el software, que me dará un iterable. my_list necesita contener una lista de datos de los contenidos de dicho iterable. Al hacerlo así, consulto la primera lista y luego la recorro para extraer los datos y ponerlos en my_list. Entonces lo estoy ordenando. Por último, le estoy haciendo cosas con el método do_stuff(), que lo recorrerá y hará cosas para cada elemento.
El problema es que no puedo do_stuff() antes de que esté ordenado, ya que el orden de la lista es importante por varias razones. No creo que pueda evitar tener que pasar dos listas: una para construir la lista y una para hacer cosas para cada elemento, ya que no sabremos por adelantado si un artículo agregado recientemente en la posición N Quédese en la posición N después de que hayamos agregado el siguiente elemento, pero parece más limpio insertar cada elemento de forma ordenada, en lugar de agregarlos al final. Algo así como esto:
for item in "query for stuff":
my_list.append_sorted(item)
¿Vale la pena molestarse tratando de hacerlo de esta manera, o debería sólo se adhieren a la construcción de la lista y, a continuación, la clasificación es?
Gracias!
Esto es falso. Insertar un elemento en una lista ordenada es O (log (n)) si lo hace correctamente. Y si necesita una lista ordenada entre cada inserción, entonces es mucho más eficiente mantener una lista ordenada. –
Estás pensando en una lista abstracta. Las listas de Python se implementan como matrices. Esto significa que la inserción cuesta O (n) en el caso promedio, independientemente de dónde se inserte. Ver https://wiki.python.org/moin/TimeComplexity. – misha