Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pythonic way to explode a list of tuples

Tags:

python

list

I need to do the opposite of this

Multiple Tuple to Two-Pair Tuple in Python?

Namely, I have a list of tuples

[(1,2), (3,4), (5,6)]

and need to produce this

[1,2,3,4,5,6]

I would personally do this

>>> tot = []
>>> for i in [(1,2), (3,4), (5,6)]:
...     tot.extend(list(i))

but I'd like to see something fancier.

like image 989
Stefano Borini Avatar asked Dec 10 '09 12:12

Stefano Borini


2 Answers

The most efficient way to do it is this:

tuples = [(1,2), (3,4), (5,6)]
[item for t in tuples for item in t]

output

[1, 2, 3, 4, 5, 6]

Here is the comparison I did for various way to do it in a duplicate question.

I know someone is going to suggest this solution

sum(tuples, ())

But don't use it, it will create a new intermediate result list for each step! unless you don't care about performance and just want a compact solution. For more details check Alex's answer

In summary: sum is faster for small lists, but the performance degrades significantly with larger lists.

like image 163
Nadia Alramli Avatar answered Oct 21 '22 06:10

Nadia Alramli


>>> import itertools
>>> tp = [(1,2),(3,4),(5,6)]
>>> lst = list(itertools.chain(*tp))
>>> lst
[1, 2, 3, 4, 5, 6]

Of course, if you don't need a list but an iterator, you can drop the list() conversion call.

like image 28
Tim Pietzcker Avatar answered Oct 21 '22 04:10

Tim Pietzcker