合并两个元组元组

时间:2017-09-27 07:20:39

标签: python list merge tuples

我有两个元组a = (('1',), ('2',))b = (('3',), ('4',))

我需要像

这样的输出
result = (('1',3',), ('2','4',))

我已尝试将元组转换为列表,并使用zip合并为单个元组tuple(zip(list(a), list(b)))以及tuple(zip(a,b)),结果产生((('1',), ('3',)), (('2',), ('4',)))

我应该做些什么才能获得理想的结果?我看到了元组的不变性,但是我从另一个服务中获取元组,而我所能做的就是将获得的元组转换为列表以获得预期的输出。

2 个答案:

答案 0 :(得分:2)

这样的事可能吗?

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

答案 1 :(得分:2)

压缩是正确的方法,但是你必须平整你的配对元组;你可以连接它们:

result = tuple(x + y for x, y in zip(a, b))

或者,在压缩之前展平您的ab元组

result = tuple(zip((v for t in a for v in t), (v for t in b for v in t)))

也可以使用itertools.chain()进行展平,这可能更具可读性:

from itertools import chain

result = tuple(zip(chain(*a), chain(*b)))

演示:

>>> a = (('1',), ('2',))
>>> b = (('3',), ('4',))
>>> tuple(x + y for x, y in zip(a, b))
(('1', '3'), ('2', '4'))
>>> tuple(zip((v for t in a for v in t), (v for t in b for v in t)))
(('1', '3'), ('2', '4'))
>>> from itertools import chain
>>> tuple(zip(chain(*a), chain(*b)))
(('1', '3'), ('2', '4'))