Python:压扁拉链?

时间:2016-11-20 20:59:19

标签: python

我有两个要压缩的列表:

a = ((1,2,3), (4,5,6), ... )
h = ('a','b', ... )

一个简单的zip(a,h)会返回:

[ ((1,2,3),'a'), ((4,5,6),'b'), ... ]

有什么聪明的方法可以归还吗?

[ (1,2,3,'a'), (4,5,6,'b'), ... ]

5 个答案:

答案 0 :(得分:17)

您可以在列表解析中使用元组连接:

>>> a = ((1, 2, 3), (4, 5, 6))
>>> h = ('a', 'b')
>>> [x + (y,) for x, y in zip(a, h)]
[(1, 2, 3, 'a'), (4, 5, 6, 'b')]

答案 1 :(得分:9)

如果您使用的是python 3.5或更高版本,则可以使用additional unpacking generalizations (PEP 448)

    In [24]: [(*one,two) for one, two in zip(((1, 2, 3), (4, 5, 6)) ,('a','b'))]
    Out[24]: [(1, 2, 3, 'a'), (4, 5, 6, 'b')]

答案 2 :(得分:5)

您可以使用"嵌套"元组解构:

a = ((1, 2, 3), (4, 5, 6))
h = ('a', 'b')
out = [(x, y, z, c) for (x, y, z), c in zip(a, h)]

答案 3 :(得分:1)

t = { x: sha1('A'), y: 'B', z: 'C' } clone_of_t = { x: sha1(sha1('A')), y: 'B' } 项目'简单解决方案长度固定为3:

a

答案 4 :(得分:0)

您可以使用来自itertools的链:

>>> from itertools import chain
>>> a = ((1,2,3), (4,5,6), (7,8,9) )
>>> h = ('a','b', 'c' )
>>> [ tuple(chain(x,y)) for x,y in zip(a,h) ]
[(1, 2, 3, 'a'), (4, 5, 6, 'b'), (7, 8, 9, 'c')]