将不同结构的数据组织成带有zip的元组列表

时间:2017-03-17 01:11:41

标签: python python-2.7 zip tuples

考虑以下数据:

x = [(1,1,1),(2,2,2),(3,3,3),(4,4,4)] 
y = ['a','b','c','d']

我想实现以下结构:

[(1,1,1,'a'),(2,2,2,'b'),(3,3,3,'c'),(4,4,4,'d')]

目前,我这样做:

zip(*zip(*x),y)

我想知道是否有一些针对暴露问题的标准解决方案。

1 个答案:

答案 0 :(得分:1)

您的解决方案实际上并不适用于Python 2.7:

Python 2.7.13 (default, Jan 13 2017, 10:15:16) 
[GCC 6.3.1 20161221 (Red Hat 6.3.1-1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = [(1,1,1),(2,2,2),(3,3,3),(4,4,4)] 
>>> y = ['a','b','c','d']
>>> zip(*zip(*x),y)
  File "<stdin>", line 1
SyntaxError: only named arguments may follow *expression

...虽然它在Python 3中有效,但感谢extended iterable unpacking

除了兼容性之外,它非常不透明。更直接的列表理解使您更清楚自己所做的事情:

[a + (b,) for a, b in zip(x, y)]

...并且适用于Python版本。

作为一个附带好处,根据我的机器上的一些快速,脏的测试,它比嵌套式zip方法快约70%。