简体   繁体   中英

pythonic way to explode a list of tuples

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.

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.

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

l = [(1,2), (3,4), (5,6)]
reduce (lambda x,y: x+list(y), l, [])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM