擅长:python、mysql、java
<p>最简单的:</p>
<pre><code>lst = [1,2,3] # do not shadow `list`
sum(i*v for i, v in enumerate(lst, 1))
# 14
</code></pre>
<p>reduce方法失败,因为它返回的<code>int</code>与它期望的两个输入(<code>tuple</code>)的类型不同。您可以通过以下方式完成:</p>
<pre><code>reduce(lambda a, b: (a[0]*a[1] + b[0]*b[1], 1), enumerate(lst, 1))[0]
# 14
</code></pre>
<p>注意lambda表达式的<code>(..., 1)</code>结构,其中<code>1</code>作为下一步的辅助因子</p>
<p><strong>更新:</strong>由于您实际上想要嵌套iterable的所有元素的同质乘积,因此以下内容更简单:</p>
<pre><code>from itertools import chain
from operator import mul
reduce(mul, chain(*enumerate(lst, 1)))
# 36
</code></pre>