【问题标题】:Merging two tuple of tuples合并两个元组的元组
【发布时间】:2018-03-08 13:56:39
【问题描述】:

我有两个元组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',)))

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

【问题讨论】:

    标签: python list merge tuples


    【解决方案1】:

    压缩是正确的方法,但是你仍然必须扁平化你的配对元组;您可以将它们连接起来:

    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'))
    

    【讨论】:

    • 我在这里遇到的唯一问题是元组的大小不同。例如当b = (('3',), ('4',), ('5',)) 时,结果没有('','5')。当它们的大小不同时如何使其工作?
    • @NagarajanShanmuganathan:使用itertools.zip_longest() 并提供fillvalue 参数。对于首先扁平化的情况,即'',扁平化后的情况使用('',)
    【解决方案2】:

    可能是这样的?

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

    【讨论】:

      猜你喜欢
      • 2013-09-01
      • 2020-02-19
      • 2018-12-07
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多