回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我试图用一种通用的方法来生成多个范围或列表的所有组合,例如</p>
<p><code>[range(0, 2), range(2, 5), range(4, 6), range(2, 3)]</code></p>
<p>它应该返回一个2x3x2x1=12元素列表。你知道吗</p>
<pre><code>[[0, 2, 4, 2],
[0, 2, 5, 2],
[0, 3, 4, 2],
[0, 3, 5, 2],
[0, 4, 4, 2],
[0, 4, 5, 2],
[1, 2, 4, 2],
[1, 2, 5, 2],
[1, 3, 4, 2],
[1, 3, 5, 2],
[1, 4, 4, 2],
[1, 4, 5, 2]]
</code></pre>
<p>到目前为止,这里一切都很好。当我硬编码的时候</p>
<pre><code>x = [ ( [a,b] for a in rgs[0] for b in rgs[1] ) ]
x.append( ( a + [b] for a in x[-1] for b in rgs[2]) )
x.append( ( a + [b] for a in x[-1] for b in rgs[3]) )
</code></pre>
<p>我得到了好结果。然而,当我试图概括它时</p>
<pre><code>x = [ ( [a,b] for a in rgs[0] for b in rgs[1] ) ]
for i in range(1,len(rgs)-1):
x.append( ( a + [b] for a in x[-1] for b in rgs[i+1]) )
</code></pre>
<p>我得到一个6元素列表:</p>
<pre><code>[[0, 2, 2, 2],
[0, 3, 2, 2],
[0, 4, 2, 2],
[1, 2, 2, 2],
[1, 3, 2, 2],
[1, 4, 2, 2]]
</code></pre>
<p>另外,我注意到在前两个之后生成的所有范围都使用<code>rgs[-1]</code>中的范围,而不是正确的范围。我很难理解为什么会发生这种情况,因为我认为这两个代码示例是相同的,只是后者是任意大量范围的更一般形式。你知道吗</p>