web-dev-qa-db-fra.com

Que fait exactement la méthode .join ()?

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?

185
Matt McCormick

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
281
Greg Hewgill

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.

87
Ned Batchelder

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.

53
Dan Loewenherz

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
7
Pēteris Caune

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])
4
Jorenko

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.

1
ZakS

"" .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
0
Martin
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'
0
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'
0
Akash Kandpal