List mapping question

Michael Spencer mahs at telcopartners.com
Thu Feb 3 17:55:13 EST 2005


Marc Huffnagle wrote:
> I have a number of variables that I want to modify (a bunch of strings 
> that I need to convert into ints).  Is there an easy way to do that 
> other than saying:
> 
>  > a = int(a)
>  > b = int(b)
>  > c = int(c)

It may not matter to you, at the moment, but a = int(a) is not strictly 
'modifying a variable'.  Instead int(a) creates a new int object, if possible, 
from the object that a is currently bound to.  Then a is rebound to the new object.

> 
> I tried
> 
>  > [i = int(i) for i in [a, b, c]]

You can't make an assignment in a list comprehension.  If your 'variables' are 
object attributes, you could do: [setattr(obj,name,int(getattr(obj,name)) for 
name in [list of attribute names]]


> 
> but that didn't work because it was creating a list with the values of 
> a, b and c instead of the actual variables themselves, then trying to 
> set a string equal to an integer, which it really didn't like.
> 
>      Marc

For your problem as stated:

 >>> a=b=c="1"
 >>> for var in ["a","b","c"]:
...     exec "%s = int(%s)" % (var,var)
...
 >>> a,b,c
(1, 1, 1)
 >>>

But don't do this, except as a "one-off" data crunching exercise

Michael





More information about the Python-list mailing list