in

¿Cuál es la forma preferida de concatenar una cadena en Python?

apple touch icon@2

los mejor forma de agregar una cadena a una variable de cadena es usar + o +=. Esto se debe a que es legible y rápido. También son igual de rápidos, cuál elijas es cuestión de gustos, este último es el más común. Aquí están los tiempos con el timeit módulo:

a = a + b:
0.11338996887207031
a += b:
0.11040496826171875

Sin embargo, aquellos que recomiendan tener listas y agregarlas y luego unirse a esas listas, lo hacen porque agregar una cadena a una lista es presumiblemente muy rápido en comparación con extender una cadena. Y esto puede ser cierto, en algunos casos. Aquí, por ejemplo, hay un millón de anexos de una cadena de un carácter, primero a una cadena, luego a una lista:

a += b:
0.10780501365661621
a.append(b):
0.1123361587524414

Bien, resulta que incluso cuando la cadena resultante tiene un millón de caracteres, agregar fue aún más rápido.

Ahora intentemos agregar una cadena de mil caracteres cien mil veces:

a += b:
0.41823482513427734
a.append(b):
0.010656118392944336

La cadena final, por lo tanto, termina siendo de unos 100 MB de longitud. Eso fue bastante lento, agregar a una lista fue mucho más rápido. Que ese cronometraje no incluye la final a.join(). Entonces, ¿cuánto tiempo tomaría eso?

a.join(a):
0.43739795684814453

Oups. Resulta que incluso en este caso, agregar / unir es más lento.

Entonces, ¿de dónde viene esta recomendación? Python 2?

a += b:
0.165287017822
a.append(b):
0.0132720470428
a.join(a):
0.114929914474

Bueno, agregar / unir es ligeramente más rápido allí si está utilizando cadenas extremadamente largas (que normalmente no lo hace, ¿qué tendría una cadena de 100 MB en la memoria?)

Pero el verdadero factor decisivo es Python 2.3. Donde ni siquiera les mostraré los tiempos, porque es tan lento que aún no ha terminado. Estas pruebas de repente toman minutos. Excepto por el append / join, que es tan rápido como en Pythons posteriores.

Sí. La concatenación de cadenas era muy lenta en Python en la edad de piedra. Pero en 2.4 ya no lo es (o al menos Python 2.4.7), por lo que la recomendación de usar append / join quedó obsoleta en 2008, cuando Python 2.3 dejó de actualizarse y debería haber dejado de usarlo. 🙂

(Actualización: resulta que cuando hice las pruebas con más cuidado que usando + y += también es más rápido para dos cadenas en Python 2.3. La recomendación de usar ''.join() debe ser un malentendido)

Sin embargo, esto es CPython. Otras implementaciones pueden tener otras preocupaciones. Y esta es otra razón más por la que la optimización prematura es la raíz de todos los males. No use una técnica que se supone que es «más rápida» a menos que primero la mida.

Por lo tanto, la «mejor» versión para realizar la concatenación de cadenas es usar + o + =. Y si eso te resulta lento, lo cual es bastante improbable, haz otra cosa.

Entonces, ¿por qué utilizo mucho anexar / unir en mi código? Porque a veces es más claro. Especialmente cuando lo que debe concatenar juntos debe estar separado por espacios, comas o nuevas líneas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Shell de Unix / Linux – El bucle for

gfg 200x200 min

Entendiendo public static void main (String[] args) en Java