【发布时间】:2021-10-20 22:52:38
【问题描述】:
我正在尝试创建一个包含两个数字的所有可能组合的数组。
我的数组是[0, 17.1]
我希望在一个包含 48 个元素的列表中获得这两个值的所有可能组合,这两个元素都可以重复。
from itertools import combinations_with_replacement
array = [0, 17.1]
combo_wr = combinations_with_replacement(array, 48)
print(len(list(combo_wr)))
我试图利用 itertools.combinations_with_replacement 创建如下所示的内容 -> combo_wr = combinations_with_replacement(array, 48)。
当我打印这个长度时,我希望得到一个更大的数字,但我只得到这些数字的 49 种组合。我哪里出错了,或者还有哪些其他功能可以更好地获得所有可能的组合,在实例中顺序并不重要。
以下是我迄今为止为可重复性所做的尝试
>>> from itertools import combinations_with_replacement
>>> array = [0, 17.1]
>>> combo_wr = combinations_with_replacement(array, 48)
>>> print(len(list(combo_wr)))
49
【问题讨论】:
-
combinations 认为顺序无关紧要,您会得到
17.1有多少元素的所有组合,从 0(它们都是 0)到 48(它们都是)所以有 49 个组合,做你想要permutations或product(array, repeat=48)代替吗? -
如果它是 0 或 17.1 的所有 48 个位置组合的列表 - 实际上是 48 位,因此 2^48,大约 2.8 * 10^14 个元素,那么您的列表将会非常长。
-
啊,你当然是对的。 OP 被这个数字弄糊涂了,我被这个数字弄糊涂了,这表明他们实际上是按照我的建议去做的,但我同意所使用的术语另有说明。
-
您在这里真正想解决什么问题,需要这两个数字在 48 个位置上的所有排列?看来您在这里处理的是 XY 问题。
-
最终,我试图找到一个最合适的时间,我可以运行泵来填充水库。我尝试了许多数值求解器,但我觉得他们并没有解决所有的可能性。我有许多限制条件,例如保持在最小和最大水平内,并以最便宜的成本交付最小数量。所以这就是为什么我正在寻找所有可能满足当时要求的解决方案。