msmsms Posted December 17, 2012 at 11:03 PM Report #487607 Posted December 17, 2012 at 11:03 PM (edited) tenho uma duvida quanto a converçao de tipos tendo eu uma lista = ['0.0','1.0'] como é que eu a converto para [0.0,1.0]? Edited December 17, 2012 at 11:04 PM by msmsms
thoga31 Posted December 17, 2012 at 11:09 PM Report #487609 Posted December 17, 2012 at 11:09 PM (edited) 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] Edited December 17, 2012 at 11:10 PM by thoga31 Knowledge is free!
msmsms Posted December 17, 2012 at 11:20 PM Author Report #487613 Posted December 17, 2012 at 11:20 PM (edited) 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 December 18, 2012 at 10:01 AM by brunoais 2x quote da mm coisa não, por favor.
thoga31 Posted December 17, 2012 at 11:30 PM Report #487617 Posted December 17, 2012 at 11:30 PM (edited) Porventura já tentaste experimentar o meu código e compreender aquilo que fiz? E pára com os quotes duplos! Edited December 17, 2012 at 11:30 PM by thoga31 Knowledge is free!
msmsms Posted December 17, 2012 at 11:43 PM Author Report #487619 Posted December 17, 2012 at 11:43 PM (edited) 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 December 17, 2012 at 11:45 PM by thoga31 GeSHi
thoga31 Posted December 17, 2012 at 11:46 PM Report #487622 Posted December 17, 2012 at 11:46 PM Uma lista por compreensão é uma lista. Logo, deve ser atribuída a uma variável. É normal que não estejas a obter os floats porque não estás a atribuir a listcomp em lado nenhum. (nao preciso saber fazer normal e nao por lista por compreensao) Como assim? Knowledge is free!
msmsms Posted December 17, 2012 at 11:50 PM Author Report #487623 Posted December 17, 2012 at 11:50 PM eu penso que o python deveria fazer float(lista) mas como deve ser linguagem antiga nao faz 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? o que é listcomp?
thoga31 Posted December 17, 2012 at 11:54 PM Report #487626 Posted December 17, 2012 at 11:54 PM (edited) 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 December 17, 2012 at 11:55 PM by thoga31 Knowledge is free!
msmsms Posted December 17, 2012 at 11:59 PM Author Report #487627 Posted December 17, 2012 at 11:59 PM 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?
thoga31 Posted December 18, 2012 at 12:06 AM Report #487629 Posted December 18, 2012 at 12:06 AM 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!
msmsms Posted December 18, 2012 at 12:21 AM Author Report #487632 Posted December 18, 2012 at 12:21 AM (edited) 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 December 18, 2012 at 10:03 AM by brunoais Quote duplo não! Este é o ultimo aviso, para a próxima é a doer.
djthyrax Posted December 18, 2012 at 02:52 PM Report #487692 Posted December 18, 2012 at 02:52 PM 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!
Solution Pedro C. Posted December 18, 2012 at 05:51 PM Solution Report #487717 Posted December 18, 2012 at 05:51 PM 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).
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now