Tengo una lista llamada L dentro de un bucle que debe recorrer en iteración millones de líneas. Las características más destacadas son:

for line in lines:
    L = ['a', 'list', 'with', 'lots', 'of', 'items']
    L[3] = 'prefix_text_to_item3' + L[3]
    Do more stuff with L...

¿Existe un mejor enfoque para agregar texto a un elemento de la lista que aceleraría mi código? ¿Se puede usar .join? Gracias.

1
drbunsen 29 jul. 2011 a las 22:37

4 respuestas

La mejor respuesta

En un código orientado al rendimiento, no es una buena idea agregar 2 cadenas juntas, es preferible usar un "".join(_items2join_) en su lugar. (Encontré algunos puntos de referencia allí: http://www.skymind.com/~ocrow/python_string/)

2
Cédric Julien 29 jul. 2011 a las 19:14

Puede haber un mejor enfoque dependiendo de lo que esté haciendo con la lista L.

Por ejemplo, si lo está imprimiendo, algo como esto puede ser más rápido.

Imprimir "{0} {1} {2} {3} {4} {5}". formato (L [0], L [1], L [2], 'prefix_text_to_item3', L [3], L [ 4])

¿Qué le sucede a L más adelante en el programa?

0
Michael Dillon 29 jul. 2011 a las 22:18

Dado que acceder a un elemento en una lista de Python es O (1), y agregar una lista a otro es O (1) (que probablemente sea la complejidad temporal de concatenar cadenas en Python), el código que ha proporcionado se ejecuta tan rápido como puedo por lo que puedo decir. :) Probablemente no pueda permitirse hacer esto, pero cuando necesito velocidad, voy a C ++ u otro lenguaje compilado cuando necesito procesar tanta información. Las cosas corren mucho más rápido. Para la complejidad temporal de las operaciones de lista en python, puede consultar este sitio web: http: //wiki.python. org / moin / TimeComplexity y aquí: ¿Qué es la complejidad del tiempo de ejecución de las funciones de la lista de python?

1
Community 23 may. 2017 a las 10:34

En realidad, no cree objetos de lista.

Usar funciones generadoras y expresiones generadoras.

def appender( some_list, some_text ):
    for item in some_list:
        yield item + some_text

Esta función appender en realidad no crea una nueva lista. Evita algunos de los gastos generales de administración de memoria asociados con la creación de una nueva lista.

1
S.Lott 29 jul. 2011 a las 18:56