我试图打印出两个列表的所有可能组合,例如,如果列表 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/