1

Convertendo o tipo de todos itens de uma entrada em Python

#Python
Ivanildo Filho
Ivanildo Filho

Se você já desenvolveu um código que pedia para converter a entrada de multiplos valores em inteiro (int) ou ponto flutuante (float), provavelmente você fez da forma abaixo:

n1, n2, n3 = input().split()
n1 = int(n1)
n2 = int(n2)
n3 = int(n3)


Por que não usar int() ou float() diretamente?

Primeiramente se aplicarmos os conversores de tipo int() ou float() diretamente o interpretador nem chega a usar o split(). Isso por que os valores inseridos não corresponde a um número válido, como é mostrado no código abaixo:

n1, n2, n3 = int(input()).split()
1 2 3
Traceback (most recent call last)
 File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1 2 3'


Se tentarmos converter após aplicar split() para transformar em lista temos outro erro:

n1, n2, n3 = int(input().split())
1 2 3
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

A função split() converte uma string em um lista de strings. Os itens dessa lista podem até estar corretos mas a função int não converte listas.

Há pelo menos dois recursos para facilitar nossa vida em Python que torna o código acima mais limpo e elegante, são eles list comprehension e a função map().


Método 1: usando a função map()


A função map aplica uma outra função a todos os itens de uma coleção de dados (lista, tupla, set ou dicionário).

Esse método é o mais fácil e simples, e agora, a sintaxe ficaria da seguinte forma:

n1, n2, n3 = map(int, input().split())

Mude o int para float se for o caso.


Método 2: usando list comprehension


List comprehension (lit. compreensão de lista) oferece uma sintaxe curta para criar uma lista baseada nos valores de uma outra lista.

Então, usando list comprehension, o código ficaria assim:

n1, n2, n3 = [int(i) for i in input().split()]

Novamente substitua int por float ser for o caso.


Outros usos:


Podemos usar os dois métodos também em strings:

numeros = "1 2 3 4 5"
​
# usando map()
lista_numeros = list(map(int, numeros.split()))
print(lista_numeros)
[1, 2, 3, 4, 5]
​
# usando list comprehension
lista_numeros = [int(i) for i in numeros.split()]
print(lista_numeros)
[1, 2, 3, 4, 5]

Usando listas, ou qualquer coleção de dados (tuplas, sets, dicionários):

precos = ["1.23", "1.48", "21.789"]
​
# usando map
lista_precos = list(map(float, precos))
print(lista_precos)
[1.23, 1.48, 21.789]
​
# usando list comprehension
lista_precos = [float(i) for i in precos]
print(lista_precos)
[1.23, 1.48, 21.789]


Aprenda mais:


Python - List Comprehension: https://www.w3schools.com/python/python_lists_comprehension.asp 

Python map() function​: https://www.geeksforgeeks.org/python-map-function/ 

Python Data Types: https://www.programiz.com/python-programming/variables-datatypes 


Espero que tenham gostado do artigo, foi o primeiro de muitos aqui para o DIO. Qualquer sugestão ou dúvidas postem nos comentários.


Me sigam nas redes sociais:

Linkedin: https://www.linkedin.com/in/silvadev/

Github: https://github.com/silvadev

Twitter: https://twitter.com/ijaysilva

0
30

Comentários (2)

1
M

Marcelo Mora

13/10/2021 14:02

Muito bom, post completo.

1
Juliano Santos

Juliano Santos

19/09/2021 15:20

Ficou top o artigo!👏🏾👏🏾👏🏾

Estudante técnico em Desenvolvimento de Sistemas

Brasil