我目前正在研究K2算法,需要找出当前变量及其可能的父代的状态和值的所有组合。
例如给出了X1,X2和X3(当前变量)。 X1可以具有值{0,1,2,3},X2 {0,1}和X3 {0,1,2,3,4}。
因此,基本上,您可以创建一个可能的最大值列表:[3, 1, 4]
现在,我遇到的困难是创建一个返回所有可能组合的函数:
[0, 0, 0]
[0, 0, 1]
[0, 0, 2]
[0, 0, 3]
[0, 1, 0]
[0, 1, 1]
[0, 2, 0]
...
列表的最大值和长度应该灵活。
非常感谢您的帮助!
答案 0 :(得分:1)
编写一个递归函数。我认为代码很容易解释。
l=[1, 3, 5, 2]
st=[]
def foo(index,l):
if(index<len(l)):
for i in range(l[index]+1):
st.append(i)
foo(index+1,l)
st.pop()
else:
print(st)
foo(0,l)
输出
[0, 0, 0, 0]
[0, 0, 0, 1]
[0, 0, 0, 2]
[0, 0, 1, 0]
[0, 0, 1, 1]
[0, 0, 1, 2]
.....
[1, 3, 5, 0]
[1, 3, 5, 1]
[1, 3, 5, 2]
答案 1 :(得分:0)
这是另一个递归实现:
def count(maxValsArr):
# Base case: count all numbers for the last digit
if len(maxValsArr) == 1:
return [[x] for x in range(maxValsArr[0] + 1)]
# Count all numbers from the current digit by incrementing this digit
# and recursively incrementing later digits
rtn = []
for digitVal in range(maxValsArr[0] + 1):
numbersToRight = count(maxValsArr[1:])
numbers = [[digitVal] + x for x in numbersToRight]
rtn = rtn + numbers
return rtn
count([1, 1, 1])
的输出为[[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1], [1, 0, 0], [1, 0, 1], [1, 1, 0], [1, 1, 1]]
。