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

标签 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, 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]

我怎样才能达到这个正确的顺序?

最佳答案

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

x = sorted(balls_in_baskets(3,3), key=lambda x: x[::-1], reverse=True)

然后打印预期的输出:

[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]

关于python - 按特定顺序枚举篮子中的球,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41455382/

相关文章:

java - 在 Java 中实现选择符号的好方法是什么?

python - Python中List的组合项

python - 用正则表达式匹配特定序列?

php - 如何通过 shell_exec 将 PHP 变量值传递给 Python

python - Cron 作业在使用 python 3.7 的 GAE 上 60 秒后以 504 网关超时结束

python - 索引错误 : index 666 is out of bounds for axis 1 with size 501

Python Enum 在对成员值使用相同的字典时显示奇怪的行为

python - 求和最大路径算法给出了意想不到的解决方案

python - 从函数返回 str 和 int

sql - 如何使用子组合对许多单独的表进行有效组合