考虑以下数据:
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)
我想知道是否有一些针对暴露问题的标准解决方案。
答案 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%。