Concatenación de cadenas y enteros en python

136

En python di que tienes

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

te dará un error para que escribas

print s+str(i) 

para no obtener el error

Creo que esta es una manera bastante torpe de manejar la concatenación int y string. Incluso Java no necesita una conversión explícita a String para hacer este tipo de concatenación. ¿Hay una mejor manera de hacer este tipo de concatenación, es decir, sin una conversión explícita en Python?

telescopio especial
fuente
8
Esto se debe a que Python es un lenguaje de tipo Strong ( en.wikipedia.org/wiki/Strong_typing ) (algo para buscar en Google para comprender más :)).
mouad
3
Conduciría a la ambigüedad. ¿Cuál sería el resultado de "1" + 1, 2o "11"y por qué?
Amigo
1
Amigo, no estoy seguro de lo que estás pensando, pero no lo asumas. Mi problema era concatenar 2 tipos de objetos diferentes y encontré la solución. No sé cuánto ha programado en Python, pero ¿alguna vez ha tratado de concatenar dos cadenas solo para obtener un error cuando una de ellas es de tipo Ninguno? Puede hacer comprobaciones explícitas, pero eso es solo un poco más de código. Este tipo de cosas son necesarias cuando necesita registrar errores.
specialscope
2
Justo s+str(i), y tienes razón!

Respuestas:

174

Formato de cadena moderno:

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

fuente
55
Solo para la posteridad, ya que las cosas han cambiado en el pasado y es probable que cambien en el futuro: ¿qué versión es "moderna"?
jvriesem
El str.formatmétodo se introdujo en Python 3.0 y se exportó a Python 2.6 y
versiones
87

Sin formato de cadena:

>> print 'Foo',0
Foo 0
Burhan Khalid
fuente
2
Esto funcionará bien con la impresión, pero no se puede asignar a una variable como una cadena. Da el objeto Set.
specialscope
2
También se queda en un espacio en blanco adicional entre los dos elementos, a menos que use la print() función v3 y establezca algunos de sus parámetros.
Levon
34

Formateo de cadenas, utilizando el .format()método de nuevo estilo (con los valores predeterminados .format () proporciona):

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

O el más antiguo, pero "todavía se %queda ", con formato:

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

En los dos ejemplos anteriores no hay espacio entre los dos elementos concatenados. Si se necesita espacio, simplemente se puede agregar en las cadenas de formato.

Estos proporcionan un gran control y flexibilidad sobre cómo concatenar elementos, el espacio entre ellos, etc. Para obtener detalles sobre las especificaciones de formato, consulte esto .

Levon
fuente
14

Python es un lenguaje interesante en el sentido de que, aunque generalmente hay una (o dos) formas "obvias" de realizar cualquier tarea, aún existe flexibilidad.

s = "string"
i = 0

print (s + repr(i))

El fragmento de código anterior está escrito en sintaxis de Python3, pero los paréntesis después de la impresión siempre se permitieron (opcional) hasta que la versión 3 los hizo obligatorios.

Espero que esto ayude.

Caitlin

CaitlinG
fuente
5

El método format () se puede utilizar para concatenar cadenas y enteros

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

si solo quieres imprimir puedes hacer esto:

print(s , i)
Daniel Jiménez
fuente
0

en Python 3.6 y posteriores, puede formatearlo así:

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

o solo:

print(f'{s} {i}')
Kasra Najafi
fuente