How To Merge an Arbitrary Number of Tuples in Python?

余生颓废 提交于 2019-12-23 08:57:40

问题


I have a list of tuples:

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

The list can be of arbitrary length, as can the tuples. I'd like to convert this into a list or tuple of the elements, in the order they appear:

f=[1,2,3,4,5,6] # or (1,2,3,4,5,6)

If I know the at development time how many tuples I'll get back, I could just add them:

m = l[0] + l[1]  # (1,2,3,4,5,6)

But since I don't know until runtime how many tuples I'll have, I can't do that. I feel like there's a way to use map to do this, but I can't figure it out. I can iterate over the tuples and add them to an accumulator, but that would create lots of intermediate tuples that would never be used. I could also iterate over the tuples, then the elements of the tuples, and append them to a list. This seems very inefficient. Maybe there's an even easier way that I'm totally glossing over. Any thoughts?


回答1:


Chain them (only creates a generator instead of reserving extra memory):

>>> from itertools import chain
>>> l = [(1,2,3),(4,5,6)]
>>> list(chain.from_iterable(l))
[1, 2, 3, 4, 5, 6]



回答2:


l = [(1, 2), (3, 4), (5, 6)]
print sum(l, ()) # (1, 2, 3, 4, 5, 6)



回答3:


reduce(tuple.__add__, [(1,2,3),(4,5,6)])



回答4:


tuple(i for x in l for i in x) # (1, 2, 3, 4, 5, 6)



回答5:


Use the pythonic generator style for all of the following:

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

list = [ x for x in i for i in b ] #produces a list
gen = ( x for x in i for i in b ) #produces a generator
tup = tuple( x for x in i for i in b ) #produces a tuple

print list
>> [1, 2, 3, 4, 5, 6]



回答6:


>>> from itertools import chain
>>> l = [(1,2,3),(4,5,6)]
>>> list(chain(*l))
[1, 2, 3, 4, 5, 6]



回答7:


You can combine the values in a list using the .extend() function like this:

l = [(1,2,3), (4,5,6)]
m = []
for t in l:
    m.extend(t)

or a shorter version using reduce:

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


来源:https://stackoverflow.com/questions/9401209/how-to-merge-an-arbitrary-number-of-tuples-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!