Tutorial

Cómo convertir tipos de datos en Python 3

PythonDevelopment

Introducción

En Python, los tipos de datos se utilizan para clasificar un tipo específico de datos, determinar los valores que puede asignar al tipo y las operaciones que puede realizar en el mismo. Cuando realice tareas de programación, a veces, deberá aplicar conversiones de valores entre tipos para manipular los valores de forma diferente. Por ejemplo, es posible que debamos concatenar valores numéricos con cadenas o representar posiciones decimales en números que se iniciaron como valores enteros.

Este tutorial lo guiará a través de la conversión de tipos de datos, incluyendo números, cadenas, tuplas y listas, y también le proporcionará ejemplos para que se familiarice con los diferentes casos de uso.

Cómo convertir tipos de números

En Python, existen dos tipos de datos numéricos: números enteros y de punto flotante o flotantes. A veces, trabajará en el código de otra persona y necesitará convertir un entero en un flotante o viceversa, o puede darse cuenta de que está usando un entero cuando lo que realmente necesita es un flotante. Python tiene métodos integrados que le permiten convertir enteros en flotantes y flotantes en enteros de forma sencilla.

Cómo convertir enteros en flotantes

El método de Python float() le permitirá convertir los enteros en flotantes. Para utilizar esta función, añada un entero dentro del paréntesis:

float(57)

En este caso, 57 se convertirá en 57.0.

También puede utilizar esto con una variable. Declaremos que f es igual a 57 y, luego, imprima el nuevo flotante:

f = 57
print(float(f))
Output
57.0

Utilizando la función float(), podemos convertir enteros en flotantes.

Cómo convertir flotantes en enteros

Python también incluye una función integrada para convertir flotantes en enteros: int().

La función int() opera de forma similar a la función float(): puede agregar un número de punto flotante dentro del paréntesis para convertirlo en un entero:

int(390.8)

En este caso, 390.8 se convertirá en 390.

También puede usar esto con variables. Declaremos que b es igual a 125.0 y que c es igual a 390.8, y, luego, imprima los nuevos flotantes:

b = 125.0
c = 390.8

print(int(b))
print(int(c))
Output
125 390

Cuando se convierten flotantes en enteros con la función int(), Python corta el decimal y los números restantes de un flotante para crear un entero. Aunque posiblemente desee redondear 390.8 a 391, Python no lo hará con la función int().

Conversión de números mediante división

En Python 3, los cocientes correspondientes se convierten de enteros a flotantes cuando se realizan divisiones, aunque no sucede así en Python 2. Es decir, en Python 3, cuando divide 5 por 2, obtendrá un flotante como respuesta (2.5):

a = 5 / 2
print(a)
Output
2.5

En Python 2, dado que estaba utilizando dos enteros, obtendrá un entero como respuesta: 5 / 2 = 2. Para obtener más información sobre las diferencias entre Python 2 y Python 3, consulte el artículo “Python 2 vs Python 3: Practical Considerations“ (Python 2 vs Python 3: Consideraciones prácticas).

Cómo realizar conversiones con cadenas

Una cadena es una secuencia de uno o más caracteres (letras, números, símbolos). Las cadenas son una forma habitual de datos en los programas informáticos, y es posible que debamos convertir cadenas en números o números en cadenas con bastante frecuencia, sobre todo si tomamos datos generados por el usuario.

Cómo convertir números en cadenas

Podemos convertir números en cadenas usando el método str(). Colocaremos un número o una variable en los paréntesis del método, y luego ese valor numérico se convertirá en un valor de cadena.

Primero, veamos primero cómo convertir enteros. Para convertir el entero 12 a un valor de cadena, puede colocar 12 en el método str():

str(12)

Cuando ejecuta str(12) en el shell interactiva de Python con el comando python en una ventana del terminal, obtendrá el siguiente resultado:

Output
'12'

Las comillas alrededor del número 12 implican que este ya no es un entero, sino que ahora es un valor de cadena.

Con las variables, podremos observar la practicidad de la conversión de enteros en cadenas. Supongamos que queremos hacer un seguimiento del progreso en la programación diaria de un usuario e introducimos la cantidad de líneas de código que este escribe a la vez. Queremos mostrar estos comentarios al usuario e imprimiremos los valores de cadenas y enteros al mismo tiempo:

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")

Cuando ejecutemos este código, veremos el siguiente error:

Output
TypeError: Can't convert 'int' object to str implicitly

No podemos concatenar cadenas ni enteros en Python. Por lo tanto, debemos convertir la variable lines en un valor de cadena:

user = "Sammy"
lines = 50

print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")

Ahora, cuando ejecutemos el código veremos el siguiente resultado en que se felicita a su usuario por su progreso:

Output
Congratulations, Sammy! You just wrote 50 lines of code.

Si queremos convertir un flotante en una cadena, en vez de un entero, aplicaremos los pasos y un formato similares. Cuando colocamos un flotante en el método str(), se mostrará un valor de cadena del flotante. Podemos usar el valor flotante o una variable:

print(str(421.034))

f = 5524.53
print(str(f))
Output
421.034 5524.53

Podemos realizar una prueba para asegurarnos de que esté bien, realizando una concatenación con una cadena:

f = 5524.53
print("Sammy has " + str(f) + " points.")
Output
Sammy has 5524.53 points.

Podemos estar seguros de que el flotante se convirtió adecuadamente en una cadena porque la concatenación se realizó sin errores.

Cómo convertir cadenas en números

Las cadenas se pueden convertir en números utilizando los métodos int() y float().

Si su cadena no tiene posiciones decimales, probablemente querrá convertirla en un entero utilizando el método int().

Utilizaremos el ejemplo del usuario Sammy realizando un seguimiento de las líneas de código escritas cada día. Es posible que queramos manipular esos valores con cálculos matemáticos para proporcionar una respuesta más interesante para el usuario, pero estos valores se almacenan actualmente en cadenas:

lines_yesterday = "50"
lines_today = "108"

lines_more = lines_today - lines_yesterday

print(lines_more)
Output
TypeError: unsupported operand type(s) for -: 'str' and 'str'

Dado que los dos valores numéricos se hallaban almacenados en cadenas, recibimos un error. El operando - para la sustracción no es un operando válido para dos valores de cadena.

Modifiquemos el código para incluir el método int() que convertirá las cadenas en enteros, lo que nos permitirá realizar cálculos matemáticos con valores que eran originalmente cadenas.

lines_yesterday = "50"
lines_today = "108"

lines_more = int(lines_today) - int(lines_yesterday)

print(lines_more)
Output
58

La variable lines_more de manera automática es un entero y, en este ejemplo, es igual al valor numérico de 58.

En el ejemplo anterior, también podemos convertir los números a valores flotantes utilizando el método float(), en lugar del método int(). En lugar de obtener el resultado de 58, obtendremos el resultado de 58.0, un flotante.

El usuario Sammy obtiene puntos en valores decimales

total_points = "5524.53"
new_points = "45.30"

new_total_points = total_points + new_points

print(new_total_points)
Output
5524.5345.30

En este caso, utilizar el operando + con dos cadenas es una operación válida, pero se concatenarán dos cadenas en lugar de sumarse dos valores numéricos. Por lo tanto, nuestro resultado se ve inusual, ya que solo coloca los dos valores juntos.

Queremos convertir estas cadenas en flotantes antes de realizar cualquier cálculo matemático con el método float():

total_points = "5524.53"
new_points = "45.30"

new_total_points = float(total_points) + float(new_points)

print(new_total_points)
Output
5569.83

Ahora que convertimos las dos cadenas en flotantes, obtendremos el resultado esperado que suma 45.30 a 5524.53.

Si tratamos de convertir un valor de cadena con decimales en un entero, obtendremos un error:

f = "54.23"
print(int(f))
Output
ValueError: invalid literal for int() with base 10: '54.23'

Si pasamos un valor decimal en una cadena al método int(), obtendremos un error porque no se convertirá en un entero.

Convertir cadenas en números nos permite modificar rápidamente el tipo de datos con el que trabajamos, de forma que podamos realizar operaciones con valores numéricos que originalmente se formularon como cadenas.

Cómo convertir en tuplas y listas

Puede usar los métodos list() y tuple() para convertir los valores colocados en ellos al tipo de datos de tupla y lista respectivamente. En Python:

  • una lista es una secuencia ordenada de elementos mutables contenida entre corchetes [ ].
  • una tupla es una secuencia ordenada de elementos inmutables contenida entre paréntesis ( ).

Cómo convertir en tuplas

Comencemos convirtiendo una lista en una tupla. Convertir una lista en una tupla, debido a que es un tipo de datos inmutable, puede permitir una optimización significativa a los programas que creamos. Cuando utilizamos el método tuple(), se devolverá la versión en tupla del valor que se coloca en este.

print(tuple(['pull request', 'open source', 'repository', 'branch']))
Output
('pull request', 'open source', 'repository', 'branch')

Podemos observar que una tupla se imprime en el resultado, ya que los elementos ahora están contenidos en los paréntesis, en lugar de los corchetes.

Usemos tuple() con una variable que representa una lista:

sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
print(tuple(sea_creatures))
Output
('shark', 'cuttlefish', 'squid', 'mantis shrimp')

De nuevo, vemos que el valor de la lista se cambia a un valor de tupla, indicado por los paréntesis. Podemos convertir cualquier tipo iterable en una tupla, incluso las cadenas:

print(tuple('Sammy'))
Output
('S', 'a', 'm', 'm', 'y')

Debido a que podemos iterar las cadenas, podemos convertirlas en tuplas con el método tuple(). Sin embargo, con los tipos de datos que no son iterables, como los enteros y flotantes, obtendremos un error de tipo:

print(tuple(5000))
Output
TypeError: 'int' object is not iterable

Si bien es posible convertir el entero en una cadena y, luego, en una tupla, como con tuple(str(5000)), es mejor optar por un código legible en conversiones complicadas.

Cómo convertir en listas

Convertir valores, especialmente las tuplas, en listas puede ser útil cuando necesita tener una versión mutable de ese valor.

Usaremos el método list() para convertir la siguiente tupla en una lista. Dado que se utilizan paréntesis en la sintaxis para crear una lista, asegúrese de incluir los paréntesis del método list() y, en este caso, también los del método print():

print(list(('blue coral', 'staghorn coral', 'pillar coral')))
Output
['blue coral', 'staghorn coral', 'pillar coral']

Los corchetes indican que una lista se devolvió a partir del valor original de la tupla que colocó mediante el método list().

Para hacer que el código sea más legible, podemos eliminar un par de paréntesis usando una variable:

coral = ('blue coral', 'staghorn coral', 'pillar coral')
list(coral)

Si imprimimos list(coral), obtendremos el mismo resultado que se muestra arriba.

Al igual que con las tuplas, las cadenas se pueden convertir en listas:

print(list('shark'))
Output
['s', 'h', 'a', 'r', 'k']

Aquí la cadena 'shark' se convirtió en una lista y proporcionó una versión mutable del valor original.

Conclusión

En este tutorial de Python, se mostró la forma de convertir varios de los tipos importantes de datos nativos en otros tipos de datos, principalmente mediante métodos integrados. Ser capaz de convertir tipos de datos en Python le ofrece más flexibilidad cuando escribe sus programas.

Creative Commons License