擅长:python、mysql、java
<p><code>Reduce()</code>将把整个iterable减少为一个值-这不是您想要的。相反,考虑将相邻的值分组,并在每个组中取乘积</p>
<pre><code>num = 2989
numSplit = [int(x) for x in str(num)]
numProduct = [x * y for x, y in zip(numSplit, numSplit[1:])]
</code></pre>
<p>这里我<code>zip</code>列表<code>numSplit</code>,它的片<code>numSplit</code>偏移1,以将每个数字与其右邻居分组。然后我迭代这个,将两个值相乘。如果一个列表比另一个短,<code>zip</code>会将所有列表截短到最短的长度-这就是这里发生的情况,防止在末尾出现额外的项</p>
<p>结果:</p>
<pre><code>>>> numProduct
[18, 72, 72]
</code></pre>
<p><strong>更新</p>
<p>如果要支持任意大小的分组,请使用以下方法:</p>
<pre><code>from functools import reduce
from operator import mul
num = 2989
size = 3
numSplit = [int(x) for x in str(num)]
numProduct = [reduce(mul, p) for p in zip(*(numSplit[x:] for x in range(size)))]
</code></pre>
<p>结果:</p>
<pre><code>>>> numProduct
[144, 648]
</code></pre>