O que faz exactamente o ... o método de adesão?

Eu sou muito novo em Python e estou completamente confuso por {[[2]} que eu li é o método preferido para concatenar strings.

Eu tentei.
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring().join(strid)
E tenho algo do género:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Porque é que funciona assim? O 595 não devia ser anexado automaticamente?

Author: martineau, 2009-12-09

7 answers

Olhe cuidadosamente para a sua saída:

5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^                 ^                 ^

Eu destaquei o "5", "9", "5" do seu texto original. A Python join() o método é um método de string, e leva uma lista de coisas para se juntar com a string. Um exemplo mais simples pode ajudar a explicar:

>>> ",".join(["a", "b", "c"])
'a,b,c'

O", " é inserido entre cada elemento da lista indicada. No seu caso, a sua " lista "é a representação de texto "595", que é tratada como a lista ["5", "9", "5"].

Parece que estás ... à procura de + em vez disso:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
 270
Author: Greg Hewgill, 2014-10-19 02:32:40

join é preciso uma coisa iterável como argumento. Normalmente é uma lista. O problema no seu caso é que uma string é iterável, dando cada personagem por sua vez. O teu código é assim:

"wlfgALGbXOahekxSs".join("595")

Que age da mesma forma que isto:

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

E assim produz o seu texto:

"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"

Strings as iterables is one of the most confusing beginning issues with Python.

 80
Author: Ned Batchelder, 2009-12-09 19:24:45

Para adicionar uma corda, basta concatená-la com o sinal +.

Por exemplo

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

join Liga cadeias de caracteres com um separador. O separador é o que você lugar mesmo antes do join. Por exemplo

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

Join toma uma lista de strings como um parâmetro.

 51
Author: Dan Loewenherz, 2009-12-09 19:26:13

Join () é para concatenar todos os elementos da lista. Para concatenar apenas duas cordas " + " faria mais sentido:

strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring() + strid
 7
Author: Pēteris Caune, 2009-12-09 19:24:09

Para expandir um pouco mais sobre o que os outros estão dizendo, Se você quisesse usar join para simplesmente concatenar suas duas cordas, você faria isso:

strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
    .tostring(), strid])
 4
Author: Jorenko, 2009-12-09 21:26:13

Ao fornecer isto como entrada,

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

O Python devolve isto como resultado:

'server=mpilgrim;uid=sa;database=master;pwd=secret'
 0
Author: harrypotter0, 2018-01-21 05:08:46

Existe uma boa explicação para o facto de ser dispendioso usar {[[0]} para concatenar um grande número de cadeias aqui

Mais o operador é uma solução perfeitamente boa para concatenar dois Python cadeia. Mas se continuar a adicionar mais de duas cadeias de caracteres ( n > 25), você talvez queiras pensar noutra coisa.

''.join([a, b, c]) o truque é uma optimização de desempenho.

 0
Author: ZakS, 2018-07-26 09:53:01