Skip to main content
 首页 » 编程设计

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

2025年05月04日11cyq1162

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

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

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

请您参考如下方法:

它们叫做 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反而。 (生成器表达式和列表理解具有相同的语法。)