6

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.

Community
  • 1
  • 1
Stefano Borini
  • 138,652
  • 96
  • 297
  • 431

3 Answers3

21

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.

Community
  • 1
  • 1
Nadia Alramli
  • 111,714
  • 37
  • 173
  • 152
6
>>> 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.

Tim Pietzcker
  • 328,213
  • 58
  • 503
  • 561
2
l = [(1,2), (3,4), (5,6)]
reduce (lambda x,y: x+list(y), l, [])
eduffy
  • 39,140
  • 13
  • 95
  • 92
  • If you go that way, `sum()` is simpler (but this approach creates a lot of intermediary lists). – tonfa Dec 10 '09 at 12:51