擅长:python、mysql、java
<p>我会解释为什么你的代码不起作用</p>
<p>从<a href="https://docs.python.org/2/library/functions.html#reduce" rel="nofollow">https://docs.python.org/2/library/functions.html#reduce</a></p>
<blockquote>
<p>The left argument, x, is the accumulated value and the right argument, y, is the update value from the iterable</p>
</blockquote>
<p>所以在第一次迭代中,你的代码
<code>len(x[1]) + len(y[1])</code>从<code>x=('data1', [1, 2, 3, 4])</code>,<code>y=('data2', [1, 2])</code>开始工作,结果是<code>6</code></p>
<p>但是在第二次迭代中,会得到<code>x=6</code>,<code>y=('data3', [1, 2, 3])]</code>,
所以<code>len(x[1])</code>是无效的。你知道吗</p>
<p>使用reduce的正确代码是</p>
<pre><code>reduce(lambda x,y: x+len(y[1]), itemsData, 0)
</code></pre>
<p>从那以后就开始工作了</p>
<pre><code>1st iteration ... x = 0, y = ('data1', [1, 2, 3, 4]), result = 4
2nd iteration ... x = 4, y = ('data2', [1, 2]), result = 6
3rd iteration ... x = 6, y = ('data3', [1, 2, 3]), result = 9
</code></pre>