Python 两元组的合并
我有两个元组Python 两元组的合并,python,list,merge,tuples,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',) 我应该怎么做才能得到想要的结果?我看到了元组的不变性,但我正在从另一个服务获取元组,我所能做的就是将获取的元组转换为一个列表
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',)
我应该怎么做才能得到想要的结果?我看到了元组的不变性,但我正在从另一个服务获取元组,我所能做的就是将获取的元组转换为一个列表,以获得预期的输出。可能是这样的吗
[i + x for i, x in zip(a, b)]
压缩是正确的方法,但是你仍然需要压扁成对的元组;您可以将它们连接起来:
result = tuple(x + y for x, y in zip(a, b))
或者,在压缩之前展平a
和b
元组:
也可以使用进行展平,这可能更具可读性:
from itertools import chain
result = tuple(zip(chain(*a), chain(*b)))
演示:
我在这里遇到的唯一问题是元组的大小不同。例如,当
b=(('3',),('4',),('5',)
时,结果没有(''5')
。当它们大小不同时,如何使其工作?@NagarajanShanmuganathan:使用并提供fillvalue
参数。对于第一个扁平化案例,即'
,您将使用('',)
。
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'))