擅长:python、mysql、java
<p>Joel的答案是最简单的,但可能效率低下(它生成所有可能的组合,然后剔除那些与约束不匹配的组合)。你知道吗</p>
<p>Ned的更有效,但是你必须手工编码所有的循环和约束。你知道吗</p>
<p>如果有多个范围,您可能希望查看<code>constraint</code>模块:</p>
<pre><code>import constraint
p = constraint.Problem()
p.addVariable('a', range(minA, maxA, aStep))
p.addVariable('b', range(minB, maxB, bStep))
p.addConstraint(lambda a,b: a >= b, ['a','b'])
abArray = [(sol['a'], sol['b']) for sol in p.getSolutionIter()]
</code></pre>
<p>注意,这不是一个很好的例子;因为函数约束只能在所有基变量都已知后才能计算,所以这本质上等同于Joel的解决方案。只有当您开始使用更多变量和各种交互约束时,这种方法的真正威力才会显现出来。你知道吗</p>