<h2>使用多个迭代器映射:</h2>
<p>考虑到所需的中间输出,我认为<code>map</code>不是获得包含整数1-9的<code>j</code>的正确工具。在</p>
<p>这是因为具有多个迭代器的<code>map</code>同时通过迭代器:</p>
<p>{a1}</p>
<p>它不会重复,那只是因为它是一个gif文件。在</p>
<h2>你的方法存在的问题:</h2>
<p>在第一次迭代中,它将返回<code>"1", "4", "7"</code>(每个iterable的第一个元素),下一个迭代将返回<code>"2", "5", "8"</code>,最后一个迭代<code>"3", "6", "9"</code>。在</p>
<p>对于每个返回值,它将应用函数,在第一次迭代的第一个示例中</p>
<pre><code>int("1") and int("4") and int("7")
</code></pre>
<p>其计算结果为<code>7</code>,因为这是链式<code>and</code>s的最后一个真实值:</p>
^{pr2}$
<p>这也解释了为什么结果是<code>24</code>,因为其他迭代的结果是<code>8</code>和{<cd11>}:</p>
<pre><code>>>> int("2") and int("5") and int("8")
8
>>> int("3") and int("6") and int("9")
9
>>> 7 + 8 + 9
24
</code></pre>
<p>在第二个示例中,添加了字符串(串联字符串),然后将其转换为整数:</p>
<pre><code>>>> "1" + "4" + "7"
"147"
>>> int("147")
147
</code></pre>
<h2>解决方案:</h2>
<p>因此,您需要第二种方法中的加法,但要像第一个示例中那样对每个变量应用<code>int</code>:</p>
<pre><code>j = list(map(lambda x, y, z: int(x)+int(y)+int(z), num, num2, num3))
</code></pre>
<h2>更好的解决方案:</h2>
<p>但是对于这个问题,我可能会使用不同的方法,特别是如果您想要“所需的”<code>j</code>。在</p>
<p>要得到这个结果,您需要<a href="https://docs.python.org/library/itertools.html#itertools.chain" rel="nofollow noreferrer">^{<cd14>}</a>iterables:</p>
<pre><code>import itertools
chained = itertools.chain(num, num2, num3)
</code></pre>
<p>然后将它们全部转换为整数:</p>
<pre><code>chained_integers = map(int, chained)
</code></pre>
<p>这个<code>chained_integers</code>是与您想要的<code>[1, 2, 3, 4, 5, 6, 7, 8, 9]</code>列表<code>j</code>等价的迭代器。如果您想再次检查,也可以在继续之前使用<code>chained_integers = list(map(int, chained))</code>并打印<code>chained_integers</code>。在</p>
<p>最后,为了<code>reduce</code>,我将实际使用内置的<code>sum</code>函数:</p>
<pre><code>reduced = sum(chained_integers) # or "reduce(lambda x, y: x+y, chained_integers)"
</code></pre>
<p>或者是单行版本:</p>
<pre><code>sum(map(int, itertools.chain(num, num2, num3)))
</code></pre>
<h2>使用理解而不是<code>map</code>的替代解决方案:</h2>
<p>更简单的是理解(在本例中,我使用了生成器表达式)而不是<code>map</code>:</p>
<pre><code>reduced = sum(int(v) for v in itertools.chain(num, num2, num3))
</code></pre>
<h2>使用生成器函数的替代解决方案:</h2>
<p>这很简单,很容易理解,但我想再举一个例子,说明如何使用自己的生成器函数来实现:</p>
<pre><code>def chain_as_ints(*iterables):
for iterable in iterables:
for item in iterable:
yield int(item)
</code></pre>
<p>你可以这样使用它:</p>
<pre><code>sum(chain_as_ints(num, num2, num3))
</code></pre>
<p>在这种情况下,生成器函数并不是真的必要的(而且考虑到其他选择,可能也不可取),我只想提一下它的完整性。在</p>