zip() or what?

R

Ray Tomes

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[*] if you know what I mean?

Have fun

Ray
 
E

Erik Max Francis

Ray said:
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[*] if you know what I
mean?


Probably

[i[1] for i in x]

or

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

Ray Tomes

Erik said:
Ray said:
request to flip array ...
Alternatively, is there a construct to get x[*] 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, ...

> [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.
 
E

Erik Max Francis

Ray said:
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).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top