Jump to content

Como converter lista de str para float?


msmsms
Go to solution Solved by Pedro C.,

Recommended Posts

Usas type casting, a conversão que o Python utiliza.

>>> float('2.4')
2.4

Para uma lista, fazes uma List Comprehension:

[float(elem) for elem in lista]

mas eu não quero fazer por elemento!

eu tenho uma lista com 80 elementos que estão em string (algarismos)

e então quero converter os elementos dessa lista para float

como exemplo: lista = ['0','1'] e quero lista = [0,1]

Edited by brunoais
2x quote da mm coisa não, por favor.
Link to comment
Share on other sites

sim sim eu adaptei mas deu string na mesma

(nao preciso saber fazer normal e nao por lista por compreensao)

def p7():

   f = open('c:\\suporte\\temperaturas.txt', 'r')
   leitura = f.read()
   split = leitura.split('\n')

   # remove elemento vazio
   c = ''
   for elem in split:
       if elem in c:
           split.remove(elem)

   for elem in split:
       linhas = elem.split('\t')
       [float(elem) for elem in linhas]
       print linhas
Edited by thoga31
GeSHi
Link to comment
Share on other sites

eu penso que o python deveria fazer float(lista) mas como deve ser linguagem antiga nao faz

Python? Antiga? LOOL

Não estejas à espera que as linguagens tenham toda a papinha feita. Python ainda assim tem uma panóplia enorme de módulos. Mais a mais, se não existe determinada função, um programador não se acanha nem reclama: programa-a!

mas nao existe nada equivalente em python?

genero exeitem as funções max, min, sum, para fazer uma serie de coisas logo ás listas

e converter elementos nao ha funções?

É assim, esses métodos recebem como argumento uma lista. float não recebe como argumento uma lista, mas sim elementos individuais. Daí a necessidade de se utilizar métodos mais "caseiros", entre eles as listcomps.

o que é listcomp?

É a abreviatura de List Comprehension.

Um conselho: as listcomps devem ser um conhecimento obrigatório em Python. Se ainda não sabes, aconselho-te a começares a estudá-las, são muito úteis e resolvem muitos problemas de uma forma simples, rápida e compacta.

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

sim eu testei o teu listcomp e deu certo (não estava a ligar esse nome ás listas por compreensão)

for elem in split:

linhas = elem.split('\t')

for elem in linhas:

l = [float(elem) for elem in linhas]

print l

existe alguma lista dessas listas por compreensão?

porquê que se chamam lista por compreensão quando são mais formulas que se colocam de memoria?

qual é a alternativa á lista por compreensão [float(elem) for elem in linhas] para este problema?

Link to comment
Share on other sites

As listas por compreensão não são fórmulas que se decoram e não há nenhuma lista delas. São construtores de listas compactos e que devem ser entendidos. No início não parece fácil, eu também passei por isso, mas garanto-te que, depois de entrares no "ritmo", começas a pensar logo em listcomps em tudo quanto é sítio para resolver muita coisa em Python.

A alternativa será sempre uma estrutura for, claro. A própria estrutura da listcomp indica logo isso.

Knowledge is free!

Link to comment
Share on other sites

As listas por compreensão não são fórmulas que se decoram e não há nenhuma lista delas. São construtores de listas compactos e que devem ser entendidos. No início não parece fácil, eu também passei por isso, mas garanto-te que, depois de entrares no "ritmo", começas a pensar logo em listcomps em tudo quanto é sítio para resolver muita coisa em Python.

A alternativa será sempre uma estrutura for, claro. A própria estrutura da listcomp indica logo isso.

ta eu percebi esse exemplo de lista por compreensao e ficou registado na minha memoria a formula da conversão

conv = [flot(elem) for elem in ] e assim como faço para o float tb devo fazer para os outros tipos e vou experimentar

obrigado

Edited by brunoais
Quote duplo não! Este é o ultimo aviso, para a próxima é a doer.
Link to comment
Share on other sites

mas eu não quero fazer por elemento!

eu tenho uma lista com 80 elementos que estão em string (algarismos)

e então quero converter os elementos dessa lista para float

como exemplo: lista = ['0','1'] e quero lista = [0,1]

É mais simples fazer simplesmente map(float, lista)

http://docs.python.org/2/library/functions.html#map

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

  • Solution

As listas podem ter elementos de diferentes tipos lá dentro pelo que é possível transformar a lista original elemento a elemento:

lista = ['0','1']
for i in xrange(len(lista)):
 lista[i] = float(lista[i])
print lista

Existem funções que transformam a lista de uma virada. Por exemplo o float_() do numpy mas devolve-te um array (que tem características diferentes de uma lista).

import numpy as np
lista = ['0','1']
np.float_(lista)

Resultado é: array([ 0., 1.])

Se queres de facto meter como argumento a lista numa função que converte todo o resultado então a solução do djthyrax (que eu não conhecia e parece-me que é python nativo) é ideal:

lista = ['0','1']
lista = map(float,lista)
type(lista)

Resultado é: <type 'list'> (e sim, tem floats lá dentro).

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.