if和For语句的花式反向语法

use*_*661 1 python

我经常看到与此类似的代码:

return [(var, val) for val in self.domains[var]
                    if self.nconflicts(var, val, assignment) == 0]
Run Code Online (Sandbox Code Playgroud)

而且我就像DAMN那样性感.但后来我尝试删除它,我得到语法错误.是否有代码编写的这个漂亮的形式逆转的典型放置任何特定的规则forif报表?

Mat*_*ams 5

他们被称为列表理解.基本语法是(我使用parens来分组我的单词,而不是语法的一部分):

[(an expression involving x) for x in someList if (some condition)]
Run Code Online (Sandbox Code Playgroud)

如果condition计算结果为true,则结果列表包括(expression involving x).因此,例如,以下列表推导使用此选项仅在结果列表中包含字符串.

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

请注意,该if部分是可选的,并且expression involving x可以像刚才那样简单x(通常在您从其他列表中过滤掉元素时使用).

事实上,expression involving x根本不必拥有x它.例如,如果由于某种原因,您想要一个0只要您的名字的列表,您可以这样做:

>>> [0 for letter in "Matthew"]
[0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

因为当你制作它之后不需要列表时,请使用生成器表达式.(生成器表达式和列表推导具有相同的语法.)