【问题标题】:How to find all combination from multiple sets of elements?如何从多组元素中找到所有组合?
【发布时间】:2020-09-08 14:46:07
【问题描述】:

我想从 3 组元素中形成所有可能的 6 种组合。组成如下:

  • 从 A 组取 2 个 (a,b,c,d,e)
  • 从 B 组中抽取 2 个 (f,g,h,i,j) 和
  • 从 C 组中取 2 个 (k,l,m,n,o,p,q,r,s,t) 此外,在此之后,我想将其导出为 CSV 文件,如下所示:
Column 1    Column 2    Column 3    Column 4   Column 5    Column 6
   a            b        f            g         k           l 

等等……

ps。如果不允许使用字母,则可以编号。 我试过使用itertools 和列表,但仍然没有。我希望你能帮帮我。

【问题讨论】:

  • 这不会给你6个组合,它会给你4*5/2+4*5/2+9*10/2组合。
  • 即使如此,假设订单微不足道。
  • @goodvibration 我会说它甚至会是(4*5/2) * (4*5/2) * (9*10/2)
  • @toydarian:是的,你是对的!
  • 组合总数为4500个,即5C2 * 5C2x * 10C2 C表示组合。我正在寻找的是包含 6 个元素的所有组合的集合。即 A 组 2 个 B 组 2 个,C 组 2 个 e.i. (a,b,f,g,k,l)

标签: python combinations


【解决方案1】:

这是你的排列代码:

# Print CSV header
print("Column 1,Column 2,Column 3,Column 4,Column 5,Column 6")

A = ['a', 'b', 'c', 'd', 'e']
B = ['f', 'g', 'h', 'i', 'j']
C = ['k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't']

for a1 in range(0, len(A)):
  for a2 in range(a1 + 1, len(A)):
    
    for b1 in range(0, len(B)):
      for b2 in range(b1 + 1, len(B)):
        
        for c1 in range(0, len(C)):
          for c2 in range(c1 + 1, len(C)):
            
            print(A[a1] + "," + A[a2] + "," + B[b1] + "," + B[b2] + "," + C[c1] + "," + C[c2])

它将为问题中指定的输入打印 4500 行。
它假定顺序无关紧要,因此如果出现(a, b),则不会出现(b, a)。它也不会输出两次字母(a, a)不会出现。

如果您想使用双字母,请将 a1 + 1 替换为 a1(对于 bc 也是如此)。
如果顺序很重要,(所以你想拥有(a, b) (b, a)),将a1 + 1 替换为0(同样适用于bc)。

【讨论】:

  • 终于!!!!这太棒了!!!!,我玩了一点,改变了从每组(3、2、1)等中取多少物品等等。它工作了!!!!!!完美!!!!非常感谢大佬!!!!还有一件事,如果不麻烦,如何将其导出为 csv 文件? :)
  • 我更改了输出,因此它将打印 CSV(= 逗号分隔值)。它应该让您了解如何将输出更改为您想要的任何内容。当您运行它时,您可以将其通过管道传输到这样的文件:python3 script.py > output.csv 或者如果您想使用 python 本身编写它,请查看documentation,它涵盖了相当广泛的主题。
  • 我终于明白了!!!!!!再次感谢!!!!!我会回来更多的 LOL.THANK YOU!!!!!! :)
  • 没问题!如果您赞成并接受我的回答,那就太好了;)
  • 完成!! :)再次感谢:)
猜你喜欢
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
相关资源
最近更新 更多