Concaténation de chaîne et d'entier en python

136

En python, dis que tu as

s = "string"
i = 0
print s+i

vous donnera une erreur alors vous écrivez

print s+str(i) 

pour ne pas obtenir d'erreur.

Je pense que c'est une manière assez maladroite de gérer la concaténation des int et des chaînes. Même Java n'a pas besoin de transtypage explicite en String pour effectuer ce type de concaténation. Existe-t-il un meilleur moyen de faire ce genre de concaténation, c'est-à-dire sans casting explicite en Python?

portée spéciale
la source
8
C'est parce que Python est un langage typé fort ( en.wikipedia.org/wiki/Strong_typing ) (quelque chose sur Google pour en comprendre plus :)).
mouad
3
Cela conduirait à l'ambiguïté. Quel serait le résultat "1" + 1, 2ou "11"et pourquoi?
Buddy
1
Buddy, je ne suis pas sûr de ce que vous pensez, mais ne vous contentez pas de supposer. Mon problème était de concaténer 2 types d'objets différents et j'ai trouvé la solution. Je ne sais pas combien avez-vous programmé en python mais avez-vous déjà essayé de concaténer deux chaînes uniquement pour obtenir une erreur lorsque l'une d'elles est de type None? Vous pouvez faire des vérifications explicites, mais ce n'est qu'un peu de code supplémentaire. Ce genre de chose est nécessaire lorsque vous devez enregistrer des erreurs.
specialscope
2
Juste s+str(i), et vous avez raison!

Réponses:

174

Formatage de chaîne moderne:

"{} and {}".format("string", 1)

la source
5
Juste pour la postérité, puisque les choses ont changé dans le passé et sont susceptibles de changer dans le futur: c'est «moderne» à partir de quelle version?
jvriesem
La str.formatméthode a été introduite dans Python 3.0 et rétroportée sur Python 2.6 et
versions
87

Pas de formatage de chaîne:

>> print 'Foo',0
Foo 0
Burhan Khalid
la source
2
Cela fonctionnera bien avec print mais ne peut pas être affecté à une variable sous forme de chaîne. Cela donne un objet Set.
specialscope
2
Il colle également dans un espace supplémentaire entre les deux éléments, sauf si vous utilisez la print() fonction v3 et définissez certains de ses paramètres.
Levon
34

Formatage de chaîne, en utilisant la méthode du nouveau style .format()(avec les valeurs par défaut fournies par .format () ):

 '{}{}'.format(s, i)

Ou le %formatage plus ancien, mais "toujours en attente":

 '%s%d' %(s, i)

Dans les deux exemples ci-dessus, il n'y a pas d' espace entre les deux éléments concaténés. Si de l'espace est nécessaire, il peut simplement être ajouté dans les chaînes de format.

Celles-ci fournissent beaucoup de contrôle et de flexibilité sur la façon de concaténer les éléments, l'espace entre eux, etc. Pour plus de détails sur les spécifications de format, voir ceci .

Levon
la source
14

Python est un langage intéressant dans la mesure où s'il existe généralement une (ou deux) façons «évidentes» d'accomplir une tâche donnée, la flexibilité existe toujours.

s = "string"
i = 0

print (s + repr(i))

L'extrait de code ci-dessus est écrit dans la syntaxe Python3 mais les parenthèses après l'impression étaient toujours autorisées (facultatif) jusqu'à ce que la version 3 les rende obligatoires.

J'espère que cela t'aides.

Caitlin

CaitlinG
la source
5

La méthode format () peut être utilisée pour concaténer une chaîne et un entier

print(s+"{}".format(i))
Aakash Wadhwa
la source
0

si vous voulez seulement imprimer, vous pouvez le faire:

print(s , i)
Daniel Jiménez
la source
0

en python 3.6 et plus récent, vous pouvez le formater comme ceci:

new_string = f'{s} {i}'
print(new_string)

ou juste:

print(f'{s} {i}')
Kasra Najafi
la source