2009-12-09 31 views
144

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

me trataron:

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

y tiene algo así como:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5 

¿Por qué funciona de esta manera? ¿No debería el 595 anexarse ​​automáticamente?

+0

creo que ha tocado su Yubikey mientras el programa se ejecuta – Trenton

Respuesta

237

Mire cuidadosamente su salida:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5 
^    ^    ^

He destacado el "5", "9", "5" de la cadena original. El método Python join() es un método de cadena, y toma una lista de para unirse a 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 
+1

¿Por qué no es así? 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? ¿Con la cuerda añadida al último elemento? –

+6

Una de las razones es que 'join' tiene la propiedad útil de ser el inverso de' split' (http://docs.python.org/library/stdtypes.html#str.split) – cobbal

+3

Si desea otro delimitador, coloque un cadena vacía al final de su lista. '','. join (['a', 'b', 'c', ''])' da "a, b, c," – tgray

7

join() es para concatenar todos los elementos de la lista. Para concatenar sólo dos cuerdas "+" tendría más sentido:

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

join toma una cosa iterable como argumento. Por lo general, es una lista. El problema en su caso es que una cadena es iterable, dando a cada personaje uno por uno. Su código se rompe a esto:

"wlfgALGbXOahekxSs".join("595") 

que actúa el mismo que esto:

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

y así produce la cadena:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5" 

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

+5

upvote para señalar lo que podría ser el quid de la confusión: las cadenas son iterables, por lo que actúan como listas de caracteres. –

44

Para añadir una cadena, simplemente concatenar con el signo +.

E.g.

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

join conecta las cadenas junto con un separador. El separador es lo que coloque justo antes del join. P.ej.

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

Unir toma una lista de cadenas como parámetro.

+3

Esta clase de respuesta directa y concisa debe ser defendida por nuestra comunidad. @Dan – DehengYe

4

Para ampliar un poco más en lo que otros dicen, si desea utilizar unirse a simplemente concatenar sus dos cadenas, que podría hacer esto:

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

Por manera que esto sea de entrada,

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

Python vuelve este como salida:

'server=mpilgrim;uid=sa;database=master;pwd=secret' 
Cuestiones relacionadas