Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   syntax question (http://www.velocityreviews.com/forums/t329601-syntax-question.html)

 AF 04-05-2004 09:23 PM

syntax question

If I have a list of touples:

l = [(x1, y1), (x2, y2), ...]

Is there a 1 line way to extract and get the sum of each x and y
column. I can do it this way with 2 lines of code and iterating
through the list twice:

sumx = sum([x for x, y in l])
sumy = sum([y for x, y in l])

Is there a 1 liner way to get the sums of both x and y and only
iterate thru the list once?

Also, is there a way to extract a list of x's and a list of y's from
the touple list? 1 line of course.

Thanks!

AF

 Erik Max Francis 04-05-2004 09:26 PM

Re: syntax question

AF wrote:

> If I have a list of touples:
>
> l = [(x1, y1), (x2, y2), ...]
>
> Is there a 1 line way to extract and get the sum of each x and y
> column. I can do it this way with 2 lines of code and iterating
> through the list twice:
>
> sumx = sum([x for x, y in l])
> sumy = sum([y for x, y in l])
>
> Is there a 1 liner way to get the sums of both x and y and only
> iterate thru the list once?
>
> Also, is there a way to extract a list of x's and a list of y's from
> the touple list? 1 line of course.

Use zip:

>>> l = ((1, 2), (3, 4), (5, 6))
>>> zip(*l)

[(1, 3, 5), (2, 4, 6)]
>>> xSum, ySum = map(sum, zip(*l))
>>> xSum

9
>>> ySum

12

--
__ Erik Max Francis && max@alcyone.com && http://www.alcyone.com/max/
/ \ San Jose, CA, USA && 37 20 N 121 53 W && AIM erikmaxfrancis
\__/ I do this for the love of music / Not for the glitter and gold
-- India Arie

 Elaine Jackson 04-06-2004 05:23 AM

Re: syntax question

>>> L=[(1,2),(10,20),(100,200)]
>>> map(None,*L)

[(1, 10, 100), (2, 20, 200)]
>>> sum(map(None,*L)[0])

111

"AF" <AnthonyF@Blarg.NET> wrote in message
| If I have a list of touples:
|
| l = [(x1, y1), (x2, y2), ...]
|
| Is there a 1 line way to extract and get the sum of each x and y
| column. I can do it this way with 2 lines of code and iterating
| through the list twice:
|
| sumx = sum([x for x, y in l])
| sumy = sum([y for x, y in l])
|
| Is there a 1 liner way to get the sums of both x and y and only
| iterate thru the list once?
|
| Also, is there a way to extract a list of x's and a list of y's from
| the touple list? 1 line of course.
|
| Thanks!
|
| AF

 All times are GMT. The time now is 04:10 AM.