Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > zip() or what?

Reply
Thread Tools

zip() or what?

 
 
Ray Tomes
Guest
Posts: n/a
 
      07-03-2003
Hi all

Many thanks to those that answered my questions about whitespace and ord()
being reverse of chr(). As well as the 2 things I asked about I learned
about 5 other useful things.

This I am trying to flip an array around so that the "subscripts" happen
in the opposite order and reading the docs I thought that zip() did this.
So I tried it like this:

x=[[0.1,0.2],[1.1,1.2],[2.1,2.2]]
print zip(x)

and what I got was (removing the .0000000001s):

[([0.1, 0.2],), ([1.1, 1.2],), ([2.1, 2.2],)]

which is just my original array with an extra useless level in it.
What I really wanted was this:

[[0.1,1.1,2.1],[0.2,1.2,2.2]]

So my question is how do I do that easily?
And what on earth is zip() doing?

Alternatively, is there a construct to get x[*][i] if you know what I mean?

Have fun

Ray

 
Reply With Quote
 
 
 
 
Erik Max Francis
Guest
Posts: n/a
 
      07-03-2003
Ray Tomes wrote:

> What I really wanted was this:
>
> [[0.1,1.1,2.1],[0.2,1.2,2.2]]
>
> So my question is how do I do that easily?


You wanted

zip(*x)

> Alternatively, is there a construct to get x[*][i] if you know what I
> mean?


Probably

[i[1] for i in x]

or

map(lambda i: i[1], x)

--
Erik Max Francis && && http://www.alcyone.com/max/
__ San Jose, CA, USA && 37 20 N 121 53 W && &tSftDotIotE
/ \ What would physics look like without gravitation?
\__/ Albert Einstein
 
Reply With Quote
 
 
 
 
Ray Tomes
Guest
Posts: n/a
 
      07-03-2003
Erik Max Francis wrote:
> Ray Tomes wrote:
>>request to flip array ...


> zip(*x)


>>Alternatively, is there a construct to get x[*][i] if you know what I
>>mean?


> [i[1] for i in x]


Thanks Erik, these do just what I want.
I can understand the 2nd one, but I don't get the meaning of the * in the
first. Is this like the opposite of putting [] around something or what?
Under what circumstances can an * be used like this, and what is it
called? - I don't know how to look for it in the docs

also, ...

wrote:
> Ray Tomes wrote:
>>This I am trying to flip an array around so that the "subscripts" happen
>>in the opposite order


> [x[-i-1] for i in range(len(x))]


Thanks Al, but that was not the flip I was looking for sorry - I hadn't
realised it could be taken another way. I wanted to swap the subscripts
with each other (a 45 degree reflection) not within one subscript end to
end (a 90 degree reflection). Erik has done the one I wanted.

 
Reply With Quote
 
Erik Max Francis
Guest
Posts: n/a
 
      07-03-2003
Ray Tomes wrote:

> I can understand the 2nd one, but I don't get the meaning of the * in
> the
> first. Is this like the opposite of putting [] around something or
> what?
> Under what circumstances can an * be used like this, and what is it
> called? - I don't know how to look for it in the docs


f(x) calls the function f with the single argument x. f(*x) calls f
with the arguments x, which is expected to be a sequence. The * syntax
comes from defining functions, where a formal argument preceded by *
means, "All the rest of the arguments as a tuple." So:

>>> def f(*x): print x

....
>>> s = [1, 2, 3]
>>> f(s)

([1, 2, 3],)
>>> f(*s)

(1, 2, 3)

The old way of writing the function call f(*x) was apply(f, x).

--
Erik Max Francis && && http://www.alcyone.com/max/
__ San Jose, CA, USA && 37 20 N 121 53 W && &tSftDotIotE
/ \ War is like love, it always finds a way.
\__/ Bertolt Brecht
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57