【问题标题】:Combinations between elements in two tuples in Python [duplicate]Python中两个元组中元素之间的组合[重复]
【发布时间】:2015-09-16 04:29:04
【问题描述】:

我有两个元组:

t1 = ('A', 'B')
t2 = ('C', 'D', 'E')

我想知道如何在元组之间创建组合,所以结果应该是:

AC, AD, AE, BC, BD, BE

编辑

使用

list(itertools.combinations('abcd',2))

我可以为给定的字符串生成组合列表:

[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]

如果我插入元组而不是字符串,则会发生以下错误:

TypeError: sequence item 0: expected string, tuple found

有什么建议吗?

【问题讨论】:

  • 如果您包括您的输入、您尝试过的内容、您的预期输出与您的实际输出以及完整的您收到的任何错误的堆栈跟踪。你也可以阅读this guide
  • itertools 有它的东西
  • nCr 与此有​​什么关系?
  • ^nCr 将列出来自 2 个集合的所有可能的值组合,因此非常适合。
  • 啊,好吧,我明白了,这个问题实际上与仅计算计算量的数学 nCr 函数无关。有道理,是的,这可能是重复的。

标签: python tuples


【解决方案1】:

itertools.product 完全符合您的要求:

>>> import itertools
>>> t1 = ('A', 'B')
>>> t2 = ('C', 'D', 'E')
>>> list(itertools.product(t1, t2))
[('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E')]
>>> [''.join(x) for x in itertools.product(t1, t2)]
['AC', 'AD', 'AE', 'BC', 'BD', 'BE']

【讨论】:

    【解决方案2】:
    for value_one in t1:
        for value_two in t2:
            result = (str(value_one), str(value_two))
            print result
    

    这不使用外部库。从字面上看,只有两个 for 循环和字符串连接。随意格式化输出。

    看来您要么没有付出任何努力来找到这个答案,要么我误解了这个问题。

    编辑:我看到您来自 R 背景,因此您可能不了解 Python 语法。请参阅 Python 基础指南;我相信他们会有很大帮助。如@Naman 所述,要保存循环中的值,您需要创建一个空列表和[list_name].append([value]) 所需的值,然后使用其他构造打印列表中的值。

    【讨论】:

      【解决方案3】:

      这是我的简单方法:

      for i in t1:
          for j in t2:
              print(i+j,end="")
      

      这三行输入给出了上述组合。

      【讨论】:

      • 当 OP 可能不想打印时,最好不要依赖一点打印语法将它们连接在一起。 string.join 更好。
      【解决方案4】:
      t = []
      for x in t1:
          for y in t2:
              t.append(x+y)
      
      t = tuple(t)
      

      所以遍历两个元组,将每个组合附加到一个列表中,然后将列表转换回一个元组。

      【讨论】:

      • 只是想指出 range(0, len(t[#]) 在 Python 中是不必要的;你可以简单地使用列表/元组/字典/等。名称以遍历所有构造值。
      • 你说得对。谢谢,我会解决的
      • 投反对票的原因是什么?
      【解决方案5】:

      您可以通过遍历两个元组来打印您想要的内容(或创建一个空列表并将您的输出存储在该列表中)

      l = []
      for c1 in t1:
          for c2 in t2:
              print c1 + c2 + ',',
              l.append(c1 + c2)
      

      最后列表l 将包含输出元素。您可以通过

      处理它的元素或制作它的元组
      t = tuple(l)
      

      【讨论】:

        【解决方案6】:

        所有可能的组合:

        import itertools
        
        t1 = ('A', 'B')
        t2 = ('C', 'D', 'E')
        
        print(tuple(itertools.combinations(t1 + t2, 2)))
        

        输出:(('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'D'), ('C', 'E'), ('D', 'E'))

        【讨论】:

        • 我只需要元组之间的组合。知道如何删除其他人吗?
        • @Andrej 更新了答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        相关资源
        最近更新 更多