<p>我认为下面的脚本实现了您要做的:</p>
<pre><code>import operator, itertools
LR = int(raw_input())
L1a = [8, 9, 14, 13, 12]
L2a = [9, 12, 14, 10, 8]
L3a = [26]
L1b = [27, 32, 26]
L2b = [30, 27, 32, 28, 31]
L3b = [31, 30, 26]
OM = [9, 10]
c1 = [(reduce(operator.mul, p), p) for p in itertools.product(L1b, L2b, L3b)]
c2 = [(reduce(operator.mul, p), p) for p in itertools.product(OM, L1a, L2a)]
RPL = [(((p[0][0]) / p[1][0]) * LR, p[0][1], p[1][1]) for p in itertools.product(c1, c2)]
print RPL
</code></pre>
<p>这将显示<code>LR</code>的<code>LR</code>的以下类型的结果:</p>
^{pr2}$
<p>每个置换都存储为一个元组,其结果是乘法。然后在计算<code>RPL</code>值时使用该值。在</p>
<p>您还可以按如下格式格式化<code>RPL</code>,以显示哪些排列产生了每个结果:</p>
<pre><code>for rpl, p1, p2 in RPL:
print "%8d %15s %15s" % (rpl, str(p1), str(p2))
</code></pre>
<p>以以下形式给出输出:</p>
<pre><code> 380 (27, 30, 31) (9, 8, 9)
290 (27, 30, 31) (9, 8, 12)
240 (27, 30, 31) (9, 8, 14)
340 (27, 30, 31) (9, 8, 10)
430 (27, 30, 31) (9, 8, 8)
340 (27, 30, 31) (9, 9, 9)
</code></pre>
<p>该脚本使用Python<code>itertools</code>模块。这提供了一个<code>product</code>函数,其效果与具有多个嵌套的<code>for</code>循环相同。每次迭代的结果给出<code>i</code>、<code>j</code>和{<cd10>}的值,但作为一个元组,例如<code>(27, 30, 31)</code>。在</p>
<p>通过对每个条目应用相同的函数,<code>reduce</code>命令可用于乘以返回的列表中的所有数字。由于您不能编写<code>reduce( * , p)</code>,所以可以使用Python的<code>operator</code>模块为<code>*</code>提供函数名版本,即<code>operator.mul</code>。在</p>
<p>它的结果被包装在<code>()</code>中,形成一个由两部分组成的元组,第一部分是乘法的结果,第二部分是产生它的置换。e、 g.<code>(25110, (27, 30, 31))</code>。在</p>
<p><code>c1</code>是一个包含所有这些值的列表。这叫做列表理解。它相当于一个<code>for</code>循环,其中有<code>c1.append()</code>。在</p>
<p>一旦创建了<code>c1</code>和{<cd23>}(我建议您尝试打印它们的值以查看它们的样子),然后脚本使用类似的方法来计算所有的RPL值。每次迭代给出<code>p</code>,如下所示:</p>
<pre><code>((25110, (27, 30, 31)), (648, (9, 8, 9)))
</code></pre>
<p>这是一个包含两个条目<code>(25110, (27, 30, 31))</code>和{<cd26>}的元组。Python可以使用索引访问每个值。所以为了得到<code>25110</code>,您可以使用<code>p[0][0]</code>作为第一个元组,第一部分。或者<code>p[0][1]</code>得到{<cd11>}。在</p>
<p>解决方案脚本可以转换为不使用列表理解,如下所示:</p>
<pre><code>c1 = []
for p in itertools.product(L1b, L2b, L3b):
multiply_all = reduce(operator.mul, p)
c1.append((multiply_all, p))
c2 = []
for p in itertools.product(OM, L1a, L2a):
multiply_all = reduce(operator.mul, p)
c2.append((multiply_all, p))
RPL = []
for p in itertools.product(c1, c2):
calculation = (p[0][0] / p[1][0]) * LR
RPL.append((calculation, p[0][1], p[1][1]))
</code></pre>