Jump to content
msmsms

como converter uma lista de strings para uma lista de floats?

Recommended Posts

msmsms

['10.5\t11.3\t12.8\t14.5\t16.7\t19.4\t21.5\t21.9\t20.4\t17.4\t13.7\t11.1\n', '9.3\t10.3\t11.8\t13.5\t16.0\t18.9\t20.8\t21.1\t19.7\t16.1\t12.3\t9.7\n', '9.2\t10.3\t11.5\t13.3\t15.7\t18.5\t20.1\t20.1\t18.8\t15.7\t12.1\t9.4\n', '12.0\t12.5\t13.7\t15.2\t17.8\t20.7\t23.3\t23.6\t22.0\t18.8\t15.1\t12.7']

como converter isto sem ser por listas por compreensão?


def funcao():
   linhas = ['10.5\t11.3\t12.8\t14.5\t16.7\t19.4\t21.5\t21.9\t20.4\t17.4\t13.7\t11.1\n', '9.3\t10.3\t11.8\t13.5\t16.0\t18.9\t20.8\t21.1\t19.7\t16.1\t12.3\t9.7\n', '9.2\t10.3\t11.5\t13.3\t15.7\t18.5\t20.1\t20.1\t18.8\t15.7\t12.1\t9.4\n', '12.0\t12.5\t13.7\t15.2\t17.8\t20.7\t23.3\t23.6\t22.0\t18.8\t15.1\t12.7']
   tab=[]
   for linha in linhas:
       cidade = [float(t) for t in linha.split()]
       tab = tab + [cidade]
   print (tab)

Share this post


Link to post
Share on other sites
msmsms

o output que obtes te com join não dá os valores em float

mistura os elementos todos e coloca-os em string

isso tambem faz apenas o

tab = []
for linha in linhas:
 tab = tab + linha.split()
return tab

mas a intenção é ficar com uma lista principal com listas dentro que serão separadas por \n

tab = []
for linha in linhas:
 tab = tab + [linha.split()] # colocando aqui [ ] são feitas as sublistas
return tab

mas o output é:

[['10.5', '11.3', '12.8', '14.5', '16.7', '19.4', '21.5', '21.9', '20.4', '17.4', '13.7', '11.1'], ['9.3', '10.3', '11.8', '13.5', '16.0', '18.9', '20.8', '21.1', '19.7', '16.1', '12.3', '9.7'], ['9.2', '10.3', '11.5', '13.3', '15.7', '18.5', '20.1', '20.1', '18.8', '15.7', '12.1', '9.4'], ['12.0', '12.5', '13.7', '15.2', '17.8', '20.7', '23.3', '23.6', '22.0', '18.8', '15.1', '12.7']]

e eu não queria strings mas sim floats

Edited by msmsms

Share this post


Link to post
Share on other sites
Pedro C.

Fazes um ciclo para as listas depois do split e utilizas o comando float.

In [1]: float('13.3')
Out[1]: 13.3

In [2]: type(float('13.3'))
Out[2]: <type 'float'>

Share this post


Link to post
Share on other sites
thoga31

@msmsms, o teu primeiro código está correcto, a única coisa que tens de fazer é "desmontar" a lista por compreensão de forma a que ela fique num ciclo for típico.

Vê se com este exemplo consegues desmontar a tua list comprehension:

# list comprehension:
n = [i*2 for i in l]

# ciclo 'for' estendido:
n = []
for i in l:
  n.append(i*2)


Knowledge is free!

Share this post


Link to post
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.