列表理解条件中的“elif”

我们可以在列表理解中使用elif吗?

例如:

 l = [1, 2, 3, 4, 5] for values in l: if values==1: print 'yes' elif values==2: print 'no' else: print 'idle' 

我们可以在列表理解中joinelif ,类似于上面的代码吗?

例如,答案如下:

 ['yes', 'no', 'idle', 'idle', 'idle'] 

到目前为止,我只有在列表理解时才使用。

Python的条件expression式正是为这种用例devise的:

 >>> l = [1, 2, 3, 4, 5] >>> ['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l] ['yes', 'no', 'idle', 'idle', 'idle'] 

希望这可以帮助 :-)

 >>> d = {1: 'yes', 2: 'no'} >>> [d.get(x, 'idle') for x in l] ['yes', 'no', 'idle', 'idle', 'idle'] 

你可以,有点。

请注意,当你使用像下面这样的sytax:

 ['yes' if v == 1 else 'no' for v in l] 

你正在使用if / else运算符的三元forms(如果你熟悉像C这样的语言,就像?:构造: (v == 1 ? 'yes' : 'no') )。

if / else运算符的三进制forms没有内置的“elif”,但是可以在“else”条件下进行模拟:

 ['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l] 

这就像是在说:

 for v in l: if v == 1 : print 'yes' else: if v == 2: print 'no' else: print 'idle' 

所以没有像你问到的那样直接的'elif'构造,但是它可以用嵌套的if / else语句来模拟。

你可以使用列表理解是你要创build从原来的另一个列表。

 >>> l = [1, 2, 3, 4, 5] >>> result_map = {1: 'yes', 2: 'no'} >>> [result_map[x] if x in result_map else 'idle' for x in l] ['yes', 'no', 'idle', 'idle', 'idle'] 

另一个简单的方法是使用像这样的条件列表理解:

 l=[1,2,3,4,5] print [[["no","yes"][v==1],"idle"][v!=1 and v!=2] for v in l] 

给你正确的方式:

['是','不','空闲','空闲','空闲']