Python 创建包含所有组合的列表(给出最大值)

Python 创建包含所有组合的列表(给出最大值),python,python-3.x,algorithm,Python,Python 3.x,Algorithm,我目前正在研究K2算法,需要找出当前变量及其可能的父变量的所有状态和值的组合 e、 g.给出了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] ... 列表的最大值和长度应该是灵活的 非常

我目前正在研究K2算法,需要找出当前变量及其可能的父变量的所有状态和值的组合

e、 g.给出了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]
...
列表的最大值和长度应该是灵活的


非常感谢你的帮助

编写一个递归函数。我认为这段代码很容易解释

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)

下面是另一个递归实现:

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

计数[1,1,1]的输出为[[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,1],[1,1,0],[1,1,0]。

您的问题不清楚,请添加您的过程和预期结果。我已更新了问题。我希望现在它更清楚了…仍然不清楚[1,3,5,2]列表来自何处,或者您将如何获得输出。它们之间的关系如何?棘手的问题。输入总是数字的还是可以是任何东西?@Alex刚刚再次更新了描述。我希望现在一切都清楚了。对不起,解释不清楚!非常感谢你!
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