¿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.