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


209

Soy bastante nuevo en Python y estoy completamente confundido por .join() lo 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 obtuve algo como:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5

¿Por qué funciona así? ¿No debería 595simplemente agregarse automáticamente?


1
Creo que tocaste tu Yubikey mientras se ejecutaba el programa
Trenton

Respuestas:


303

Mire cuidadosamente su salida:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

He resaltado el "5", "9", "5" de su cadena original. El join()método Python 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

1
¿Por qué no es así: 5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5wlfgALGbXOahekxSs? ¿Con la cadena añadida al último elemento?
Matt McCormick

10
Una razón es que le da joinla propiedad útil de ser el inverso de split( docs.python.org/library/stdtypes.html#str.split )
cobbal

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

9
OP probablemente fue confuso string.joincon lo os.path.joinque efectivamente concatena caminos
Juan Campa

91

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

"wlfgALGbXOahekxSs".join("595")

que actúa igual que esto:

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

y así produce tu cadena:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

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


8
voto positivo por señalar cuál podría ser el quid de la confusión: las cadenas son iterables, por lo que actúan como listas de caracteres.
Daniel Baird

59

Para agregar una cadena, simplemente concatene con el +signo.

P.ej

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

joinconecta las cadenas juntas con un separador. El separador es lo que coloca justo antes de join. P.ej

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

Join toma una lista de cadenas como parámetro.


55
Este tipo de respuesta directa y concisa debe ser defendida por nuestra comunidad. @Dan
DehengYe

7

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

4

Para ampliar un poco más lo que otros dicen, si quisieras usar join para simplemente concatenar tus dos cadenas, harías esto:

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

2

Hay una buena explicación de por qué es costoso usarlo +para concatenar una gran cantidad de cadenas aquí

El operador Plus es una solución perfecta para concatenar dos cadenas de Python. Pero si sigue agregando más de dos cadenas (n> 25), es posible que desee pensar en otra cosa.

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


0

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
list = ["my", "name", "is", "kourosh"]   
" ".join(list)

Si esto es una entrada, usando 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'

0

"" .join puede usarse para copiar la cadena de una lista a una variable

>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.