用Pythonic方式展开元组列表

6 投票
3 回答
7872 浏览
提问于 2025-04-15 16:52

我需要做这个的反向操作

在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))

但我想看看更花哨的做法。

3 个回答

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

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

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

当然,如果你不需要一个列表,而只想要一个迭代器的话,可以去掉 list() 这个转换的调用。

21

最有效的方法是这样的:

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

输出结果

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

这里有一个比较,我对不同的方法做了对比,虽然这个问题是重复的。

我知道会有人建议这个解决方案

sum(tuples, ())

但别用它,因为每一步都会创建一个新的中间结果列表!除非你不在乎性能,只想要一个简洁的解决方案。想了解更多细节,可以看看Alex的回答

总结一下:对于小列表,使用sum会更快,但当列表变大时,性能会明显下降。

撰写回答