python - If 和 For 语句的花式反向语法

标签 python

我经常看到类似这样的代码:

return [(var, val) for val in self.domains[var]
                    if self.nconflicts(var, val, assignment) == 0]

我觉得该死的性感。但后来我有时会尝试删除它,但会出现语法错误。这种很好的代码编写形式是否有任何特殊规则可以颠倒 forif 语句的典型位置?

最佳答案

它们叫做 list comprehensions .基本语法是(我使用括号对我的词进行分组,而不是作为语法的一部分):

[(an expression involving x) for x in someList if (some condition)]

如果 condition 的计算结果为 true,则结果列表包括 (expression involving x)。因此,例如,以下列表理解使用它来仅在结果列表中包含字符串。

>>> myList = [1,"hello",5.4,"world"]
>>> [elem for elem in myList if type(elem)==str]
['hello', 'world']

请注意,if 部分是可选的,expression involved x 可以简单到只是 x(通常在您需要时使用)只是从另一个列表中过滤掉元素)。

事实上,包含 x 的 expression 根本不需要包含 x。例如,如果出于某种原因你想要一个与你的名字一样长的 0 列表,你可以这样做:

>>> [0 for letter in "Matthew"]
[0, 0, 0, 0, 0, 0, 0]

如果您不需要列表在创建后保留下来,请使用 generator expressions反而。 (生成器表达式和列表理解具有相同的语法。)

关于python - If 和 For 语句的花式反向语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12966989/

相关文章:

python - 文本文件中的单词列表

python - 删除 NumPy 中的所有其他元素

python - WSGI/APACHE/DJANGO ..导入错误: Could not import settings

python - 如何在 python 中使用 pydot 附加 2 个图(graph1 和 graph2)

python 搜索以字母开头的字符串

python - 需要 ASCII 扑克牌才能打印一行

python - 如何在gae中传递/模拟admin_required装饰器?

python - 使用python中的 Pandas 将背景颜色应用于excel中的一行

python - 我应该在服务器端渲染 ajax 响应吗?

python - 调试器不会在 VS Code for Python 中的断点处停止