By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,768 Members | 2,004 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,768 IT Pros & Developers. It's quick & easy.

List of strings to list of floats ?

P: n/a
Is it possible to convert a very long list of strings to a list of floats in
a single statement ?

I have tried float(x) and float(x[:]) but neither work. I guess I would have
to write a loop if there isn't a way.
Oct 16 '05 #1
Share this Question
Share on Google+
8 Replies


P: n/a

Madhusudan> Is it possible to convert a very long list of strings to a
Madhusudan> list of floats in a single statement ?

Madhusudan> I have tried float(x) and float(x[:]) but neither work. I
Madhusudan> guess I would have to write a loop if there isn't a way.

Try:
los = ["123.0", "2", "1e-6"]
map(float, los) [123.0, 2.0, 9.9999999999999995e-07] [float(s) for s in los]

[123.0, 2.0, 9.9999999999999995e-07]

Skip
Oct 16 '05 #2

P: n/a
sk**@pobox.com wrote:

Madhusudan> Is it possible to convert a very long list of strings to a
Madhusudan> list of floats in a single statement ?

Madhusudan> I have tried float(x) and float(x[:]) but neither work. I
Madhusudan> guess I would have to write a loop if there isn't a way.

Try:
>>> los = ["123.0", "2", "1e-6"]
>>> map(float, los) [123.0, 2.0, 9.9999999999999995e-07] >>> [float(s) for s in los]

[123.0, 2.0, 9.9999999999999995e-07]

Skip


Thanks. Now, a slightly more complicated question.

Say I have two lists of floats. And I wish to generate a list of floats that
is a user defined function of the two lists.

I tried :

def rpyth(x,y):
r=sqrt(pow(x,2.0)+pow(y,2.0))
return r

r1n=map(rpyth,x2n[1:len(x2n)-1],y2n[1:len(y2n)-1])

And I get an error complaining about floats.
Oct 17 '05 #3

P: n/a
Madhusudan Singh wrote:
sk**@pobox.com wrote:

Madhusudan> Is it possible to convert a very long list of strings to a
Madhusudan> list of floats in a single statement ?

Madhusudan> I have tried float(x) and float(x[:]) but neither work. I
Madhusudan> guess I would have to write a loop if there isn't a way.

Try:
>>> los = ["123.0", "2", "1e-6"]
>>> map(float, los)

[123.0, 2.0, 9.9999999999999995e-07]
>>> [float(s) for s in los]

[123.0, 2.0, 9.9999999999999995e-07]

Skip

Thanks. Now, a slightly more complicated question.

Say I have two lists of floats. And I wish to generate a list of floats that
is a user defined function of the two lists.

I tried :

def rpyth(x,y):
r=sqrt(pow(x,2.0)+pow(y,2.0))
return r

r1n=map(rpyth,x2n[1:len(x2n)-1],y2n[1:len(y2n)-1])

And I get an error complaining about floats.


.... but the error message is a secret so you don't want to tell us what
it was? It's more helpful if you actually copied and pasted the exact
error traceback you see, as this avoids any potential answerer having to
guess what went wrong.

A brief description of what you were trying to do is also helpful, since
it isn't obvious at first glance why you are omitting some of hte list
elements.

regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC www.holdenweb.com
PyCon TX 2006 www.python.org/pycon/

Oct 17 '05 #4

P: n/a
Steve Holden wrote:
Madhusudan Singh wrote:
sk**@pobox.com wrote:

Madhusudan> Is it possible to convert a very long list of strings to
a Madhusudan> list of floats in a single statement ?

Madhusudan> I have tried float(x) and float(x[:]) but neither work. I
Madhusudan> guess I would have to write a loop if there isn't a way.

Try:

>>> los = ["123.0", "2", "1e-6"]
>>> map(float, los)
[123.0, 2.0, 9.9999999999999995e-07]
>>> [float(s) for s in los]
[123.0, 2.0, 9.9999999999999995e-07]

Skip

Thanks. Now, a slightly more complicated question.

Say I have two lists of floats. And I wish to generate a list of floats
that is a user defined function of the two lists.

I tried :

def rpyth(x,y):
r=sqrt(pow(x,2.0)+pow(y,2.0))
return r

r1n=map(rpyth,x2n[1:len(x2n)-1],y2n[1:len(y2n)-1])

And I get an error complaining about floats.


... but the error message is a secret so you don't want to tell us what
it was? It's more helpful if you actually copied and pasted the exact
error traceback you see, as this avoids any potential answerer having to
guess what went wrong.

A brief description of what you were trying to do is also helpful, since
it isn't obvious at first glance why you are omitting some of hte list
elements.

regards
Steve


I apologize for that.

The error message is :

Traceback (most recent call last):
File "takedata.py", line 163, in ?
r1n=map(rpyth,x2n[1:len(x2)-1],y2n[1:len(y2)-1])
File "takedata.py", line 15, in rpyth
r=sqrt(pow(x,2.0)+pow(y,2.0))
TypeError: a float is required

I understand why the error is occuring (pow is not overloaded to accept
lists of floats instead of floats ?). How do I fix this ?
Oct 17 '05 #5

P: n/a
Madhusudan Singh wrote:
Thanks. Now, a slightly more complicated question.

Say I have two lists of floats. And I wish to generate a list of floats that
is a user defined function of the two lists.


result = [sqrt(x**2 + y**2) for x, y in zip(xs, ys)]

--
Erik Max Francis && ma*@alcyone.com && http://www.alcyone.com/max/
San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
Did you ever love somebody / Did you ever really care
-- Cassandra Wilson
Oct 17 '05 #6

P: n/a
Erik Max Francis wrote:
Madhusudan Singh wrote:
Thanks. Now, a slightly more complicated question.

Say I have two lists of floats. And I wish to generate a list of floats
that is a user defined function of the two lists.


result = [sqrt(x**2 + y**2) for x, y in zip(xs, ys)]


Works perfectly. Thanks !
Oct 17 '05 #7

P: n/a
Erik Max Francis:
result = [sqrt(x**2 + y**2) for x, y in zip(xs, ys)]


Another possibility:

from math import hypot
result = [hypot(*xy) for xy in zip(xs, ys)]

Or better:
from math import hypot
result = map(hypot, xs, ys)

bearophile

Oct 17 '05 #8

P: n/a
Madhusudan Singh <sp**************@spam.invalid> wrote:
...
Say I have two lists of floats. And I wish to generate a list of floats
that is a user defined function of the two lists.


result = [sqrt(x**2 + y**2) for x, y in zip(xs, ys)]


Works perfectly. Thanks !


If zip works and map doesn't, most likely your problem is that the two
lists have different lengths. In this case, zip truncates to the
shorter list, while map conceptually extends the shorter list with
copies of None -- causing an error when you try to do arithmetic between
a float towards the end of the longer list, and None...!
Alex
Oct 18 '05 #9

This discussion thread is closed

Replies have been disabled for this discussion.