我有一个元组列表:
l=[(1,2,3),(4,5,6)]
列表可以是任意长度的,元组也是如此。我想按照它们出现的顺序将其转换为元素的列表或元组:
f=[1,2,3,4,5,6] # or (1,2,3,4,5,6)
如果我知道在开发时我会收到多少元组,我可以添加它们:
m = l[0] + l[1] # (1,2,3,4,5,6)
但是因为直到运行时我才知道我会有多少个元组,所以我不能这样做。我觉得有一种方法可以使用map
来做到这一点,但我无法弄明白。我可以遍历元组并将它们添加到累加器,但这将创建许多永远不会被使用的中间元组。我还可以遍历元组,然后迭代元组的元素,并将它们附加到列表中。这看起来非常低效。也许有一种更简单的方式让我完全屈服。有什么想法吗?
答案 0 :(得分:16)
Chain他们(只创建一个生成器而不是保留额外的内存):
>>> from itertools import chain
>>> l = [(1,2,3),(4,5,6)]
>>> list(chain.from_iterable(l))
[1, 2, 3, 4, 5, 6]
答案 1 :(得分:9)
l = [(1, 2), (3, 4), (5, 6)]
print sum(l, ()) # (1, 2, 3, 4, 5, 6)
答案 2 :(得分:2)
reduce(tuple.__add__, [(1,2,3),(4,5,6)])
答案 3 :(得分:2)
tuple(i for x in l for i in x) # (1, 2, 3, 4, 5, 6)
答案 4 :(得分:2)
对以下所有内容使用pythonic生成器样式:
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]
答案 5 :(得分:1)
>>> from itertools import chain
>>> l = [(1,2,3),(4,5,6)]
>>> list(chain(*l))
[1, 2, 3, 4, 5, 6]
答案 6 :(得分:0)
您可以使用.extend()
函数组合列表中的值,如下所示:
l = [(1,2,3), (4,5,6)]
m = []
for t in l:
m.extend(t)
或使用reduce的简短版本:
l = [(1,2,3), (4,5,6)]
m = reduce(lambda x,y: x+list(y), l, [])