我有两个要压缩的列表:
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'), ... ]
答案 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')]