python - 枚举A盒中N个球的组合?

标签 python enumeration combinations

我想列举 N 个球在 A 个盒子中的所有可能组合。

例子: 我有 8 个球要放在 3 个盒子里:

         box_1   box_2   box_3
case-1       8       0       0
case-2       0       8       0
case-3       0       0       8 
case-4       7       1       0
case-5       7       0       1
case-6       6       2       0
...

我的第一个问题是我需要 A 循环来执行此操作,但我想要那个 A 和 < strong>N 是用户的输入。那么,如果不编写用户可能需要的所有可能数量的循环怎么办?

aN 的值介于 2 和 ~800 之间,因此对计算时间如此。如何优化该算法?

如果你用python语言回答我,我将不胜感激。 感谢所有贡献!

最佳答案

这从 python 2.6 开始工作得很好,(2.5-friendly implementation of itertools.permutations is available as well):

>>> import itertools
>>> boxes = 3
>>> balls = 8
>>> rng = list(range(balls + 1)) * boxes
>>> set(i for i in itertools.permutations(rng, boxes) if sum(i) == balls)
{(0, 1, 7), (3, 1, 4), (0, 4, 4), (1, 0, 7), (4, 0, 4), (3, 0, 5), (1, 2, 5), (1, 7, 0), (0, 8, 0), (1, 4, 3), (6, 0, 2), (4, 3, 1), (3, 3, 2), (0, 5, 3), (5, 3, 0), (5, 1, 2), (2, 4, 2), (4, 4, 0), (3, 2, 3), (7, 1, 0), (5, 2, 1), (0, 6, 2), (6, 1, 1), (2, 2, 4), (1, 1, 6), (0, 2, 6), (7, 0, 1), (2, 1, 5), (0, 0, 8), (2, 0, 6), (2, 6, 0), (5, 0, 3), (2, 5, 1), (1, 6, 1), (8, 0, 0), (4, 1, 3), (6, 2, 0), (3, 5, 0), (0, 3, 5), (4, 2, 2), (1, 3, 4), (0, 7, 1), (1, 5, 2), (2, 3, 3), (3, 4, 1)}

关于python - 枚举A盒中N个球的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/996004/

相关文章:

c - 用自环枚举图

python - 使用嵌套 for 循环的组合

python - 在python中将元组转换为字典

python - 如何在制表符分隔的管道输出的第一列上进行 grep?子集?

arrays - 计算数组中不同的元素

objective-c - 枚举包含字典的数组会产生意外的输出

python - 在计算之前删除包含某些值的组合

algorithm - 保存结果的最佳方法 - 动态规划

python - 如何从 Django 中的请求 QueryDict 中删除 key ?

python - 是否存在用于读取行然后拆分它们的快速 Python 内置方法?