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


Soy bastante nuevo en Python y estoy completamente confundido por .join() que he leído que 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 añadirse automáticamente el 595?

Author: martineau, 2009-12-09

7 answers

Mire cuidadosamente su salida:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

He resaltado la "5", "9", "5" de tu cuerda original. La Pitón join() method es un método de cadena, y toma una lista de cosas para unir 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 + en su lugar:

print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
 270
Author: Greg Hewgill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-19 02:32:40

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

"wlfgALGbXOahekxSs".join("595")

Que actúa de la misma manera:

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

Y así produce tu cadena:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

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

 80
Author: Ned Batchelder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 19:24:45

Para añadir una cadena, sólo concatenar con el + signo.

Por ejemplo

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

join conecta cadenas con un separador. El separador es lo que colocar justo antes del join. Por ejemplo,

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

Join toma una lista de cadenas como parámetro.

 51
Author: Dan Loewenherz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 19:26:13

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
 7
Author: Pēteris Caune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 19:24:09

Para expandir un poco más sobre lo que otros están diciendo, si desea usar join 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])
 4
Author: Jorenko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-09 21:26:13

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'
 0
Author: harrypotter0,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-21 05:08:46

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

El operador Plus es una solución perfecta para concatenar dos Python cadena. Pero si sigues añadiendo más de dos cadenas (n > 25), quizá quiera pensar en otra cosa.

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

 0
Author: ZakS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-26 09:53:01