<p>问题来自<code>ls4all</code>。你的代码是</p>
<pre><code>ls4all = list(ls2square +ls3cube)
</code></pre>
<p>变量<code>ls4all</code>不包含所需的列表:<code>[[4, 8], [16, 64], [36, 216]]</code>,因为它是<code>ls2square</code>和<code>ls3cube</code>的串联。我们希望在<code>ls2square</code>和<code>ls3cube</code>中有元素对的列表。为了实现这一点,您可以创建一个迭代器来输出<code>ls2square</code>和<code>ls3cube</code>的元素对,例如,使用<code>zip</code>命令</p>
<p><code>zip</code>命令的工作原理如下:</p>
<pre class="lang-py prettyprint-override"><code>>>> list(zip([1,10], [2,20]))
[(1, 2), (10, 20)]
</code></pre>
<p>如您所见,它将<code>[1,10]</code>和<code>[2,20]</code>中的元素聚集在一起,形成成对。
因此,您可以通过以下方式使用<code>zip</code>:</p>
<pre class="lang-py prettyprint-override"><code>ls2square = [4, 16, 36]
ls3cube = [8, 64, 216]
ls4all = list([a,b] for a,b in zip(ls2square, ls3cube))
print(ls4all)
</code></pre>
<p>无论如何,简短的回答是:</p>
<pre class="lang-py prettyprint-override"><code>>>> print([(k**2, k**3) for k in [1,2,3,4,6] if k % 2 == 0])
[(4, 8), (16, 64), (36, 216)]
</code></pre>
<p>更新:
如果整数的类型为<code>float</code>,则<code> k % 2</code>将引发以下错误</p>
<pre><code>Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float modulo
</code></pre>
<p>因此,如果要将浮点值四舍五入到最接近的整数,只需使用<code>round</code>函数,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>ls2square = [round(x)**2 for x in ls1]
ls3cube = [round(x)**3 for x in ls1]
</code></pre>
<p>以上简短的回答是:</p>
<pre class="lang-py prettyprint-override"><code>>>> print([(round(k)**2, round(k)**3) for k in [1.0, 2.0, 3.0, 4.0, 6.0] if round(k) % 2 == 0])
[(4, 8), (16, 64), (36, 216)]
</code></pre>