469,281 Members | 2,450 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,281 developers. It's quick & easy.

zip() or what?

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

Jul 18 '05 #1
4 1986
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 && ma*@alcyone.com && 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
Jul 18 '05 #2
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, ...

ac*****@easystreet.com 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.

Jul 18 '05 #3
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, ...

ac*****@easystreet.com 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.

Jul 18 '05 #4
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 && ma*@alcyone.com && 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
Jul 18 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

11 posts views Thread by News | last post: by
6 posts views Thread by David Lozzi | last post: by
1 post views Thread by Arkady Renko | last post: by
11 posts views Thread by comp.lang.php | last post: by
8 posts views Thread by =?Utf-8?B?Q2hyaXMgRmluaw==?= | last post: by
7 posts views Thread by moogyd | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by suresh191 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.