tags:

views:

58

answers:

3

Let's say i have an array of Tuples, s, in the form of:

s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))

and i want to return another Tuple, t, consisting of the first element per row:

t = (1, 2, 3)

Which would be the most efficient method to do this? I could of course just iterate through s, but is there any slicker way of doing it?

+1  A: 

No.

t = tuple(x[0] for x in s)
Ignacio Vazquez-Abrams
+1  A: 

The list comprehension method given by Ignacio is the cleanest.

Just for kicks, you could also do:

zip(*s)[0]

*s expands s into a list of arguments. So it is equivalent to

zip( (1, 23, 34),(2, 34, 44), (3, 444, 234))

And zip returns n tuples where each tuple contains the nth item from each list.

HS
Actually, that's a generator expression, not a list comprehension.
Ignacio Vazquez-Abrams
+1  A: 
import itertools
s = ((1, 23, 34),(2, 34, 44), (3, 444, 234))
print(next(itertools.izip(*s)))

itertools.izip returns an iterator. The next function returns the next (and in this case, first) element from the iterator.

In Python 2.x, zip returns a tuple. izip uses less memory since iterators do not generate their contents until needed.

In Python 3, zip returns an iterator.

unutbu