¿Qué hace exactamente el método .join ()?

Soy bastante nuevo en Python y estoy completamente confundido por .join() que he leído es el método preferido para concatenar cadenas.

Lo intenté:

 strid = repr(595) print array.array('c', random.sample(string.ascii_letters, 20 - len(strid))) .tostring().join(strid) 

y tengo algo como:

 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5 

¿Por qué funciona así? ¿No debería el 595 simplemente ser añadido automáticamente?

Mire cuidadosamente su salida:

 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5 ^ ^ ^ 

He resaltado los “5”, “9”, “5” de su cadena original. El método join() Python es un método de cadena y toma una lista de cosas para unirlas con la cadena. Un ejemplo más simple podría ayudar a explicar:

 >>> ",".join(["a", "b", "c"]) 'a,b,c' 

El “,” se inserta entre cada elemento de la lista dada. En su caso, su “lista” es la representación de cadena “595”, que se trata como la lista [“5”, “9”, “5”].

Parece que estás buscando + lugar:

 print array.array('c', random.sample(string.ascii_letters, 20 - len(strid))) .tostring() + strid 

join toma una cosa iterable como un argumento. Por lo general es una lista. El problema en su caso es que una cadena es iterable en sí misma, dando a su vez cada carácter. Su código se descompone en esto:

 "wlfgALGbXOahekxSs".join("595") 

que actúa de la misma manera que esto:

 "wlfgALGbXOahekxSs".join(["5", "9", "5"]) 

y así produce su cadena:

 "5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5" 

Las cadenas como iterables es uno de los problemas iniciales más confusos con Python.

Para agregar una cadena, simplemente concaténela con el signo + .

P.ej

 >>> a = "Hello, " >>> b = "world" >>> str = a + b >>> print str Hello, world 

join conecta cadenas entre sí con un separador. El separador es lo que colocas justo antes de la join . P.ej

 >>> "-".join([a,b]) 'Hello, -world' 

Unir toma una lista de cadenas como parámetro.

join () es para concatenar todos los elementos de la lista. Para concatenar solo dos cadenas “+” tendría más sentido:

 strid = repr(595) print array.array('c', random.sample(string.ascii_letters, 20 - len(strid))) .tostring() + strid 

Para ampliar un poco más lo que otros dicen, si desea utilizar unir para simplemente concatenar sus dos cadenas, haría esto:

 strid = repr(595) print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid))) .tostring(), strid]) 

Hay una buena explicación de por qué es costoso usar + para concatenar un gran número de cadenas aquí

Además, el operador es una solución perfecta para concatenar dos cuerdas de Python. Pero si continúa agregando más de dos cadenas (n> 25), es posible que desee pensar en otra cosa.

''.join([a, b, c]) es una optimización del rendimiento.

Al proporcionar esto como entrada,

 li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret'] s = ";".join(li) print(s) 

Python devuelve esto como salida:

 'server=mpilgrim;uid=sa;database=master;pwd=secret' 
 list = ["my", "name", "is", "kourosh"] " ".join(list) 

Si se trata de una entrada, utilizando el método JOIN, podemos agregar la distancia entre las palabras y también convertir la lista a la cadena.

Esta es la salida de Python

 'my name is kourosh'