Soy bastante nuevo en Python y estoy completamente confundido con .join()
que he leído que es el método preferido para concatenar cadenas.
Lo he intentado:
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 añadirse automáticamente el "595"?
Observa atentamente tu resultado:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
He resaltado el "5", "9", "5" de tu cadena original. El método de Python join()
es un método de cadena, y toma una lista de cosas para unir con la cadena. Un ejemplo más sencillo puede ayudar a explicarlo:
>>> ",".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 lo que buscas es +
:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
join
toma una cosa iterable como argumento. Normalmente es una lista. El problema en tu caso es que una cadena es en sí misma iterable, dando cada carácter a su vez. Tu código se reduce a esto:
"wlfgALGbXOahekxSs".join("595")
que actúa igual que esto:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
y así produce su cadena:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Las cadenas como iterables es una de las cuestiones más confusas al principio de Python.
join() es para concatenar todos los elementos de la lista. Para concatenar sólo dos cadenas "+" tendría más sentido:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid