Python 按特定顺序枚举篮子中的球

Python 按特定顺序枚举篮子中的球,python,python-3.x,combinations,combinatorics,Python,Python 3.x,Combinations,Combinatorics,我想以一个特定的顺序列举这个解决方案。目前,使用以下代码: def balls_in_baskets(balls=1, baskets=1): if baskets == 1: yield [balls] elif balls == 0: yield [0]*baskets else: for i in range(balls+1): for j in balls_in_baskets(balls-i

我想以一个特定的顺序列举这个解决方案。目前,使用以下代码:

def balls_in_baskets(balls=1, baskets=1):
    if baskets == 1:
        yield [balls]
    elif balls == 0:
        yield [0]*baskets
    else:
        for i in range(balls+1):
            for j in balls_in_baskets(balls-i, 1):
                for k in balls_in_baskets(i, baskets-1):
                    yield j+k

x=[t for t in balls_in_baskets(3,3)][::-1]
for i in x:
    print(i)
我明白了:

[0, 0, 3]
[0, 1, 2]
[0, 2, 1]
[0, 3, 0]
[1, 0, 2]
[1, 1, 1]
[1, 2, 0]
[2, 0, 1]
[2, 1, 0]
[3, 0, 0]
但是,我想要这个订单:

[0, 0, 3]
[0, 1, 2]
[1, 0, 2]
[0, 2, 1]
[1, 1, 1]
[2, 0, 1]
[0, 3, 0]
[1, 2, 0]
[2, 1, 0]
[3, 0, 0]
[0, 0, 3]
[0, 1, 2]
[1, 0, 2]
[0, 2, 1]
[1, 1, 1]
[2, 0, 1]
[0, 3, 0]
[1, 2, 0]
[2, 1, 0]
[3, 0, 0]

如何实现正确的顺序?

在列表理解中使用生成器已经失去了它的内存效率,因此您还可以对结果进行排序:

x = sorted(balls_in_baskets(3,3), key=lambda x: x[::-1], reverse=True)
然后打印预期输出: