我有两个元组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',)))
。
我应该做些什么才能获得理想的结果?我看到了元组的不变性,但是我从另一个服务中获取元组,而我所能做的就是将获得的元组转换为列表以获得预期的输出。
答案 0 :(得分:2)
这样的事可能吗?
[i + x for i, x in zip(a, b)]
答案 1 :(得分:2)
压缩是正确的方法,但是你必须平整你的配对元组;你可以连接它们:
result = tuple(x + y for x, y in zip(a, b))
或者,在压缩之前展平您的a
和b
元组:
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'))