我有两个元组
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',)))
。
我应该做什么才能得到想要的结果?我看到了元组的不变性,但我从另一个服务获取元组,我所能做的就是将获得的元组转换为列表以获得预期的输出。
压缩是正确的方法,但你仍然必须展平你的配对元组;你可以连接它们:
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)))
扁平化也可以用来完成,这可能更具可读性:
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'))
[i + x for i, x in zip(a, b)]