Je suis assez nouveau en Python et je suis complètement dérouté par .join()
que j’ai lu est la méthode recommandée pour la concaténation de chaînes.
J'ai essayé:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring().join(strid)
et a quelque chose comme:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
Pourquoi ça marche comme ça? Le 595
ne devrait-il pas simplement être ajouté automatiquement?
Regardez attentivement votre sortie:
5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5
^ ^ ^
J'ai mis en évidence les "5", "9", "5" de votre chaîne d'origine. La méthode Python join()
est une méthode chaîne et prend un list d'éléments à associer à la chaîne. Un exemple plus simple pourrait aider à expliquer:
>>> ",".join(["a", "b", "c"])
'a,b,c'
Le "," est inséré entre chaque élément de la liste donnée. Dans votre cas, votre "liste" est la chaîne "595", qui est traitée comme la liste ["5", "9", "5"].
Il semble que vous recherchiez +
à la place:
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
join
prend une chose itérable comme argument. D'habitude c'est une liste. Le problème dans votre cas est qu’une chaîne est elle-même itérable, donnant chaque caractère à tour de rôle. Votre code se décompose en ceci:
"wlfgALGbXOahekxSs".join("595")
qui agit comme ceci:
"wlfgALGbXOahekxSs".join(["5", "9", "5"])
et produit ainsi votre corde:
"5wlfgALGbXOahekxSs9wlfgALGbXOahekxSs5"
Les chaînes en tant que iterables sont l’un des problèmes les plus déconcertants au début avec Python.
Pour ajouter une chaîne, il suffit de la concaténer avec le signe +
.
Par exemple.
>>> a = "Hello, "
>>> b = "world"
>>> str = a + b
>>> print str
Hello, world
join
relie les chaînes avec un séparateur. Le séparateur est ce que vous placez juste avant la join
. Par exemple.
>>> "-".join([a,b])
'Hello, -world'
Join prend une liste de chaînes en tant que paramètre.
join () sert à concaténer tous les éléments de la liste. Pour concaténer seulement deux chaînes, "+" aurait plus de sens:
strid = repr(595)
print array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring() + strid
Pour développer un peu plus ce que les autres disent, si vous vouliez utiliser join pour concaténer simplement vos deux chaînes, procédez comme suit:
strid = repr(595)
print ''.join([array.array('c', random.sample(string.ascii_letters, 20 - len(strid)))
.tostring(), strid])
Une bonne explication explique pourquoi il est coûteux d’utiliser +
pour concaténer un grand nombre de chaînes ici
Plus est une solution parfaite pour concaténer deux Python des cordes. Mais si vous continuez à ajouter plus de deux chaînes (n> 25), vous pourrait vouloir penser quelque chose d'autre.
L'astuce
''.join([a, b, c])
est une optimisation des performances.
"" .join peut être utilisé pour copier la chaîne d'une liste dans une variable
>>> myList = list("Hello World")
>>> myString = "".join(myList)
>>> print(myList)
['H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd']
>>> print(myString)
Hello World
list = ["my", "name", "is", "kourosh"]
" ".join(list)
S'il s'agit d'une entrée, en utilisant la méthode JOIN, nous pouvons ajouter la distance entre les mots et convertir la liste en chaîne.
Ceci est une sortie Python
'my name is kourosh'
En fournissant cela comme entrée,
li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
s = ";".join(li)
print(s)
Python renvoie ceci en sortie:
'server=mpilgrim;uid=sa;database=master;pwd=secret'