擅长:python、mysql、java
<pre><code>[bean for bean in beans if bean.type == 'coffee']
</code></pre>
<p><a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions" rel="noreferrer">List comprehensions</a>很整洁。即使更整洁,通常也不需要生成一个完整的列表—只需要一个迭代器,该迭代器为您提供列表将包含的值。这是一个生成器,可以通过生成器表达式简洁地表达它们。它们的编写方式与列表理解相同,只是方括号变为paren(如果它是函数调用中的唯一参数,则可以省略它们),例如<code>'\n'.join(str(bean) for bean in beans if bean.type == 'coffee')</code>。优点是提到的懒惰,也就是说,在真正需要(请求)价值观之前,你永远不会产生价值观,也不会同时将所有价值观都保存在内存中(当然,除非消费者这样做)。</p>
<p>您可以使用<code>itertools.chain</code>将多个iterable(包括列表)链接到一个iterable,或者如果您无法更改正在获取列表列表的事实,则可以使用<code>(x for list in lists for x in list)</code>。对于涉及简单深度嵌套的广义解决方案,需要使用递归的完整函数。</p>