2009-12-10 73 views
5

的名单,我需要做的这Python的方式爆炸的元组

Multiple Tuple to Two-Pair Tuple in Python?

即相反,我有元组

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

的列表,并需要产生这种

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

我会亲自做这个

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

但我想看到的东西票友。

+0

哎哟tot.append(I) - 扩展BYT一个列表项,伤害了:-) – Kugel 2009-12-10 12:55:10

+0

你是一个列表的形式获得的元组延长我的眼睛。我正在迭代元组列表。 – 2009-12-10 13:00:51

+0

呃...等一下。 – 2009-12-10 13:08:30

回答

18

最有效的方式做到这一点是这样的:

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

输出

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

这里是the comparison我做了各种办法做到这一点的重复问题。

我知道有人会提出这样的解决方案

sum(tuples,()) 

但不要使用它,它会为每一个步骤一个新的中间结果列表!除非你不关心性能,只想要一个紧凑的解决方案。 有关更多详细信息,请参阅Alex's answer

总结:对于小列表,总和会更快,但性能会随着列表的增大而显着降低。

+1

肯定很优雅。 – 2009-12-10 13:02:07

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

如果一直这样下去,'和()'是简单(但这种方式创造了很多中介名单)。 – tonfa 2009-12-10 12:51:38

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

当然,如果你不需要一个清单,但一个迭代器,你可以删除list()转换调用。

+0

你展示了如何链三元组,不包含三元组 – SilentGhost 2009-12-10 12:55:49

+1

或单列表:LST =名单(chain.from_iterable(TP)) – 2009-12-10 12:56:53

+0

我已经编辑它,但它不只是三元组,但一个“元组三元组“ - 现在更改为元组列表... – 2009-12-10 12:57:31