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?
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
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.
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.
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
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])
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'
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.