|
|
1
21
检查 PEP 202 这就是列表理解语法被引入语言的地方。
同样来自PEP 202,用于回答您的问题: Rationale
List comprehensions provide a more concise way to create lists in
situations where map() and filter() and/or nested loops would
currently be used.
|
|
|
2
15
如果您担心一行太复杂,可以将其拆分:
我总是发现Python中的行连续体看起来有点奇怪,但这确实使我们更容易看到每一行都在循环什么。由于额外的赋值/查找不会产生或破坏任何结果,您也可以这样编写:
在实践中,我认为我从来没有嵌套过超过2个深度的理解,在这一点上它仍然很容易理解。 |
|
|
3
6
如果有更具描述性的名称,我认为这可能是非常清楚的,我无法想象会有任何可测量的性能差异。 也许你在想更多的表达方式,比如:
--事实上,这甚至是无效的。你必须把事情放在另一个顺序:
我可能会这样写,作为一种快速平展列表的方法,但总的来说,我认为您是在写:您通过减少键入来节省的时间通常与您为正确使用生成器表达式所花费的额外时间相平衡。 |
|
|
4
4
因为它们是生成器表达式,所以可以将它们绑定到各自的名称,以使其更可读,而不会改变性能。将其更改为嵌套循环可能会损害性能。
选择哪一个并不重要,我认为多行示例总体上更具可读性。 |
|
|
5
1
注意:优雅在一定程度上取决于品味。 清单的理解永远不会再多了 清楚的 强大的 而不是列出理解。那么,为什么要使用它们呢? 列表理解是什么 简明的 --它们允许你在一行中做一些事情。 使用列表理解的时机是,当您需要某个列表时,可以相当轻松地动态创建它,并且您不希望或不需要中间对象。当您需要将当前作用域中的某些对象打包为一个可以馈送到函数中的对象时,可能会发生这种情况,如下所示:
这段代码的可读性与扩展版本差不多,但要短得多。它避免了创建/命名在当前范围内只使用一次的对象,这可以说是更优雅的。 |
|
|
6
0
表达方式:
这几乎是一样的:
|
|
|
7
0
我发现它在这样的情况下非常有用和优雅,因为您有这样的代码:
|