Nice way to cast a homogeneous tuple
Hexamorph
hexamorph at gmx.net
Wed Jul 28 09:47:17 EDT 2010
wheres pythonmonks wrote:
> A new python convert is now looking for a replacement for another perl idiom.
>
> In particular, since Perl is weakly typed, I used to be able to use
> unpack to unpack sequences from a string, that I could then use
> immediately as integers.
>
> In python, I find that when I use struct.unpack I tend to get strings.
> (Maybe I am using it wrong?)
>
> def f(x,y,z): print x+y+z;
>
> f( *struct.unpack('2s2s2s','123456'))
> 123456
>
> (the plus concatenates the strings returned by unpack)
>
> But what I want is:
>
> f( *map(lambda x: int(x), struct.unpack('2s2s2s','123456')))
> 102
>
> But this seems too complicated.
>
> I see two resolutions:
>
> 1. There is a way using unpack to get out string-formatted ints?
>
> 2. There is something like map(lambda x: int(x).... without all the
> lambda function call overhead. (e.g., cast tuple)?
> [And yes: I know I can write my own "cast_tuple" function -- that's
> not my point. My point is that I want a super-native python inline
> solution like (hopefully shorter than) my "map" version above. I
> don't like defining trivial functions.]
>
> W
In [31]: import re
In [32]: sum(int(x) for x in re.findall("..", s))
Out[32]: 102
To get a tuple instead of the sum, just do:
In [33]: tuple(int(x) for x in re.findall("..", s))
Out[33]: (12, 34, 56)
More information about the Python-list
mailing list