python - 在python中打印出两个列表的组合

我试图打印出两个列表的所有可能组合,例如,如果列表 1 的值是 {1,2,3} 并且列表二的值是 {A,B,C} 我应该得到以下结果:

A=1 B=1 C=1
A=1 B=1 C=2
A=1 B=1 C=3
A=1 B=2 C=1
A=1 B=2 C=2
A=1 B=2 C=3
A=1 B=3 C=1
A=1 B=3 C=2
A=1 B=3 C=3
etc

对于列表中的所有可能值。所以最后一行应该是

A=3 B=3 C=3

现在这应该适用于任意大小的数组。所以如果我有 list1 = {1,2,3,4,5,6} list2 = {A,B,C,D,E,F}

我应该得到

A=1 B=1 C=1 D=1 E=1 F=1
A=1 B=1 C=1 D=1 E=1 F=2
A=1 B=1 C=1 D=1 E=1 F=3
A=1 B=1 C=1 D=1 E=1 F=4
A=1 B=1 C=1 D=1 E=1 F=5
A=1 B=1 C=1 D=1 E=1 F=6
A=1 B=1 C=1 D=1 E=2 F=1
A=1 B=1 C=1 D=1 E=2 F=2
A=1 B=1 C=1 D=1 E=2 F=3
A=1 B=1 C=1 D=1 E=2 F=4
A=1 B=1 C=1 D=1 E=2 F=5
A=1 B=1 C=1 D=1 E=2 F=6
etc

所以在第一个例子中会有 3^3 = 27 种组合,我试图解决这个问题:

def printArrays():
    letters = {'A', 'B', 'C', 'D', 'E', 'F'}
    domain = {1, 2, 3, 4, 5, 6}
    myStr = ""
    for value in domain:
        for letter in letters:
            myStr += letter + "=" + str(value) + " "
        myStr += "\n"
    print(myStr)

显然它给出了错误的输出,因为它给了我:

F=1 D=1 C=1 B=1 E=1 A=1 
F=2 D=2 C=2 B=2 E=2 A=2 
F=3 D=3 C=3 B=3 E=3 A=3 
F=4 D=4 C=4 B=4 E=4 A=4 
F=5 D=5 C=5 B=5 E=5 A=5 
F=6 D=6 C=6 B=6 E=6 A=6 

解决这个问题的正确方法是什么?

注意:我还想要一个不涉及任何库的解决方案,因为我正在尝试学习递归,所以递归解决方案将不胜感激。

最佳答案

您正在做的是遍历 letters * domain。您想要的是遍历 letters ^ len(domain)

我将使用 itertools.product为此,因为它是为组合产品明确构建的:

import itertools

def printArrays():
    letters = {'A', 'B', 'C', 'D', 'E', 'F'}
    domain = {1, 2, 3, 4, 5, 6}
    myStr = ""
    for current in itertools.product(domain, repeat=len(letters)):
        for k, v in zip(letters, current):
            myStr += k + "=" + str(v) + " "
        myStr += "\n"
    print(myStr)

这会打印出您要查找的内容:

E=1 D=1 F=1 B=1 A=1 C=1
E=1 D=1 F=1 B=1 A=1 C=2
E=1 D=1 F=1 B=1 A=1 C=3
E=1 D=1 F=1 B=1 A=1 C=4
E=1 D=1 F=1 B=1 A=1 C=5
E=1 D=1 F=1 B=1 A=1 C=6
E=1 D=1 F=1 B=1 A=2 C=1
E=1 D=1 F=1 B=1 A=2 C=2
E=1 D=1 F=1 B=1 A=2 C=3
E=1 D=1 F=1 B=1 A=2 C=4
E=1 D=1 F=1 B=1 A=2 C=5
E=1 D=1 F=1 B=1 A=2 C=6
E=1 D=1 F=1 B=1 A=3 C=1
...
E=6 D=6 F=6 B=6 A=6 C=2
E=6 D=6 F=6 B=6 A=6 C=3
E=6 D=6 F=6 B=6 A=6 C=4
E=6 D=6 F=6 B=6 A=6 C=5
E=6 D=6 F=6 B=6 A=6 C=6

https://stackoverflow.com/questions/74050322/

相关文章:

regex - 删除换行符后跟多个选项卡正则表达式

ruby - 如何在 Ruby 中创建可调用属性

javascript - 警告 IE11 用户他们的浏览器在 React 18 中不受支持

delphi - TFileStream 比 TMemoryStream 慢

c++ - 如何在 SSE2 中为 8 位和 16 位整数实现 vector 右移和左移?

awk - 使用 awk 将字段分隔符 ',' 更改为空格

c# - 在 C# 中将小驼峰命名法转换为 PascalCase?

c - 使用个性系统调用使堆栈可执行

r - 如何在组内创建字母序列?

c++ - 你能用折叠表达式实现 fn(x1 ^ fn(x0)) 吗?