擅长:python、mysql、java
<p>需要注意的一点是,嵌套列表的理解是O(n<sup>2</sup>)顺序。意思是它在两个范围的乘积上循环。如果要使用<code>map</code>和<code>filter</code>,则必须创建所有组合。你可以在过滤之后或之前做这些,但是不管你做什么,你都不可能拥有这两个函数的所有这些组合,除非你改变范围和/或修改其他东西。在</p>
<p>一种完全实用的方法是使用<code>itertools.product()</code>和{<cd2>},如下所示:</p>
<pre><code>In [16]: from itertools import product
In [17]: list(filter(lambda x: x[0]%2==0 and x[1]%2==1, product(range(5), range(5))))
Out[17]: [(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
</code></pre>
<p>还请注意,使用两次迭代的嵌套列表理解基本上比多个<code>map</code>/<code>filter</code>函数更具可读性。当你的函数仅仅是内置函数时,使用内置函数的性能要比列表理解快得多,这样你就可以确保它们都是在C级别上执行的。当你用一个<code>lambda</code>函数这样的Python/higher lever操作来打破这个链,你的代码不会比列表理解快。在</p>