Convierta cadenas en números y números en cadenas en Python

La conversión de tipos de datos es una tarea común y trivial en el flujo de trabajo de cualquier desarrollador. Python proporciona varias formas de realizar esta tarea.

Introducción

Python le permite convertir cadenas, enteros y flotantes indistintamente de diferentes maneras. La forma más sencilla de hacer esto es usando las funciones básicas str(), int() y float(). Además de esto, también hay un par de otras formas.

Antes de pasar a convertir cadenas en números y convertir números en cadenas, primero veamos un poco cómo se representan las cadenas y los números en Python.

Nota: Para simplificar la ejecución y mostrar estos ejemplos, usaremos el intérprete de Python.

Cuerdas

Los literales de cadena en Python se declaran rodeando un carácter con comillas dobles (") o simples ('). Las cadenas en Python son en realidad solo matrices con un Unicode para cada carácter como un elemento de la matriz, lo que le permite usar índices para acceder a un solo carácter de la cadena.

Por ejemplo, podemos acceder a caracteres individuales de estas cadenas especificando un índice:

1
2
3
4
5
6
>>> stringFirst = "Hello World!"
>>> stringSecond = 'Again!'
>>> stringFirst[3]
'l'
>>> stringSecond[3]
'i'

Números

Un número en Python puede ser un ’entero’, un ‘flotante’ o un ‘complejo’.

Los números enteros pueden ser un número entero positivo o negativo. Desde Python 3, los números enteros son ilimitados y prácticamente pueden contener cualquier número. Antes de Python 3, el límite superior era 2^31^-1 para tiempos de ejecución de 32 bits y 2^63^-1 para tiempos de ejecución de 64 bits.

Los flotantes también tienen una longitud ilimitada, pero un número de punto flotante debe contener un punto decimal.

Los números complejos deben tener una parte imaginaria, que se denota con j:

1
2
3
>>> integerFirst = 23
>>> floatFirst = 23.23
>>> complextFirst = 1 + 23j

Conversión de cadenas en números

Usando la función int()

Si desea convertir una cadena en un número entero, la forma más sencilla sería utilizar la función int(). Simplemente pase la cadena como argumento:

1
2
3
4
5
>>> x = "23"
>>> y = "20"
>>> z = int(x) - int(y)
>>> z
3

Esto funciona como se esperaba cuando está pasando una representación de cadena de un número entero a int(), pero tendrá problemas si la cadena que pasa no contiene un valor entero. Si hay caracteres no numéricos en su cadena, int() generará una excepción:

1
2
3
4
5
>>> x = "23a"
>>> z = int(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '23a'

Esta misma excepción incluso se generará si se pasa una cadena flotante válida:

1
2
3
4
5
>>> x = "23.4"
>>> z = int(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '23.4'

La función int() tiene otra función útil además de convertir cadenas en enteros, también te permite convertir números de cualquier base a un entero de base 10. Por ejemplo, podemos convertir la siguiente cadena binaria a un entero de base 10 usando el parámetro base:

1
2
>>> int('1101100', base=2)
108

Lo mismo se puede hacer para cualquier otra base, como hexadecimal (base 16):

1
2
>>> int('6C', base=16)
108

Usando la función float()

La conversión de cadenas literales a flotantes se realiza a través de la función float():

1
2
3
4
5
>>> x = "23.23"
>>> y = "23.00"
>>> z = float(x) - float(y)
>>> z
0.23000000000000043

Tenga en cuenta que el valor resultante no es del todo exacto, ya que debería ser solo 0.23. Esto tiene que ver con problemas de matemáticas de coma flotante en lugar de la conversión de cadena a número.

La función float() ofrece un poco más de flexibilidad que la función int() ya que puede analizar y convertir tanto flotantes * como * enteros:

1
2
3
4
5
>>> x = "23"
>>> y = "20"
>>> z = float(x) - float(y)
>>> z
3.0

A diferencia de int(), float() no genera una excepción cuando recibe un valor numérico que no es flotante.

Sin embargo, generará una excepción si se le pasa un valor no numérico:

1
2
3
4
5
>>> x = "23a"
>>> z = float(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: '23a'

Mientras que float() no tiene la capacidad de convertir números que no sean de base 10 como lo hace int(), tiene la capacidad de convertir números representados en notación científica (también conocida como notación electrónica):

1
2
3
4
>>> float('23e-5')
0.00023
>>> float('23e2')
2300.0

Usando la función compleja()

La conversión de cadenas literales a números complejos se realiza a través de la función complex(). Para hacerlo, la cadena debe seguir un formato específico. En particular, debe formatearse sin espacios en blanco alrededor de los operadores + o -:

1
2
3
4
5
>>> x = "5+3j"
>>> y = "3+1j"
>>> z = complex(x) + complex(y)
>>> z
(8+4j)

Tener espacios adicionales entre los operadores + o - dará como resultado una excepción:

1
2
3
4
>>> z = complex("5+ 3j")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: complex() arg is a malformed string

Al igual que la función float(), complex() también es más relajado en cuanto a los tipos de números que permite. Por ejemplo, la parte imaginaria del número se puede omitir por completo, y también se pueden analizar tanto los números enteros como los flotantes:

1
2
3
4
>>> complex("1")
(1+0j)
>>> complex("1.2")
(1.2+0j)

Sin embargo, como puede ver, esto no debe usarse como un reemplazo más flexible para int/float ya que agrega automáticamente la parte imaginaria del número a la versión en cadena.

Conversión de números en cadenas

Usando la función str()

La función str() se puede usar para cambiar cualquier tipo numérico a una cadena.

La función str() está disponible desde Python 3.0+ ya que las cadenas en Python 3.0+ son Unicode por defecto. Sin embargo, esto no es cierto para las versiones de Python anteriores a la 3.0, en las que, para lograr el mismo objetivo, se utiliza la función unicode():

1
2
3
4
5
6
>>> str(23)   # Integer to String
'23'
>>> str(23.3) # Float to String
'23.3'
>>> str(5+4j) # Complex to String
'(5+4j)'

Lo bueno de str() es que puede manejar la conversión de cualquier tipo de número a una cadena, por lo que no necesita preocuparse por elegir el método correcto según el tipo de número que está convirtiendo.

Usando la función formato()

Otra forma de convertir valores numéricos en cadenas es usar la función format(), que le permite establecer marcadores de posición dentro de una cadena y luego convertir otro tipo de datos en una cadena y llenar los marcadores de posición.

Para usar la función, simplemente escriba una cadena seguida de .format() y pase los argumentos para los marcadores de posición.

Aquí hay un ejemplo:

1
2
>>> "My age is {}".format(21)
'My age is 21'

También se puede hacer referencia a los argumentos en la función .format() individualmente, usando sus posiciones o nombres de variables:

1
2
>>> "You get {product} when you multiply {1} with {0}".format(5.5, 3, product=16.5)
'You get 16.5 when you multiply 3 with 5.5'

Tenga en cuenta que debajo del capó, la función .format() simplemente usa str() para convertir los argumentos en cadenas. Básicamente, esta es una forma similar de convertir números en cadenas como la sección anterior, pero .format() actúa como una función conveniente para formatear una cadena.

Conclusión

Python le permite convertir cadenas, enteros y flotantes indistintamente de diferentes maneras. La forma más sencilla de hacer esto es usando las funciones básicas str(), int() y float(). Además de esto, hay un par de otras formas, como la función format(). Solo tenga en cuenta que las funciones int(), float() y complex() tienen sus limitaciones y pueden generar excepciones si la cadena de entrada no tiene el formato exacto esperado.

Licensed under CC BY-NC-SA 4.0