擅长:python、mysql、java
<p>实际上,访问<code>n</code>项上的属性所需的计算量并没有任何问题—您需要以某种方式对所有<code>n</code>项进行循环。但是,如果您担心如何高效地使用<em>内存</em>的话,您可能可以使用生成器而不是列出一个列表。生成器只在需要时创建下一个元素,因此不必一次将所有内容存储在内存中。缺点是,您不再可以随意访问这些项目。因此,如果您只想在生成器上执行for循环,而不想在特定位置重复访问项,那么这是有意义的。当然,可以通过调用<code>list(my_generator)</code>将生成器转换为列表。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>large_diff_generator = filter(lambda relationship: relationship.diff > 1, relationship_list)
</code></pre>
<p>编辑:我错误地认为从<code>filter</code>返回的值是一个生成器。它是一个iterable,与生成器一样,它不预先计算每个值,而是根据需要一次计算一个值。您可以按以下方式进行验证:</p>
<pre class="lang-py prettyprint-override"><code>from typing import Generator, Iterable
evens = filter(lambda x: x % 2 == 0, range(100000000000000000000000000000))
isinstance(evens, Generator) # False
isinstance(evens, Iterable) # True
</code></pre>