【发布时间】:2012-01-30 09:30:23
【问题描述】:
我的问题是关于 Python List Comprehension 的可读性。当我遇到具有复杂/嵌套列表理解的代码时,我发现我必须重新阅读它们几次才能理解其意图。
是否有一种直观的方式来大声朗读列表理解?似乎我应该从中间开始“阅读”,然后阅读 if 条件(如果有),然后阅读 表达式 最后。
为了理解它,我将如何大声阅读以下代码行:
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
“对于列表 x 中的每个元素,以及列表 y 中的每个元素,如果两个元素不相同,创建一个元组列表。”
我正在努力解决的两个例子: 您将如何大声朗读以下列表理解?
来自 Stack Overflow 中的另一个问题:
[x for b in a for x in b]Python 文档有这个例子:
[[row[i] for row in matrix] for i in range(4)]
非常感谢任何关于朗读列表理解的方法的建议或指示,以使意图变得更清晰。
【问题讨论】:
-
不要大声朗读编程代码,这通常会造成混淆而不是澄清
-
@LieRyan 我的问题实际上是关于可读性和理解其他人的代码。我写了“大声朗读”,因为我不知道如何表达它。
-
可读性并不意味着大声朗读;我通常会尝试对理解的循环形式进行分类。嵌套推导共有三种通用方式,
[... for ... in A for ... in B]模式形成笛卡尔积;[... for ... in [... for ... in A]]形成一个管道(如在壳管中);[[... for ... in A] for ... in B]创建一个多维数组。在对循环的一般形式进行分类之后,解释表达式和 if 条件部分就变得微不足道了。 -
由于list comprehension 遵循数学集合构建符号,因此在更简单的情况下,使用此符号本身来掌握它可能会有所帮助:
S = {(x, y) : x ∈ {1,2,3} and y ∈ {3,1,4}, x != y}。不过,在更复杂的示例中,它并不是很有帮助。