我们可以在列表理解中使用elif
吗?
示例:
l = [1, 2, 3, 4, 5]
for values in l:
if values==1:
print 'yes'
elif values==2:
print 'no'
else:
print 'idle'
我们能否以与上述代码类似的方式在列表推导中包含elif
?
例如,答案如下:
['yes', 'no', 'idle', 'idle', 'idle']
到目前为止,我只在列表理解中使用了if
和else
。
答案 0 :(得分:180)
Python的conditional expressions完全是为这种用例设计的:
>>> 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']
希望这会有所帮助: - )
答案 1 :(得分:43)
>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']
答案 2 :(得分:21)
你可以,等等。
请注意,当您使用sytax时:
['yes' if v == 1 else 'no' for v in l]
您正在使用if / else运算符的三元形式(如果您熟悉C语言,这就像?:
构造:(v == 1 ? 'yes' : 'no')
)。
if / else运算符的三元形式没有内置'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语句模拟。
答案 3 :(得分:2)
您可以使用列表理解,您将从原始列表创建另一个列表。
>>> 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']
答案 4 :(得分:2)
另一个简单的方法是使用这样的条件列表理解:
l=[1,2,3,4,5]
print [[["no","yes"][v==1],"idle"][v!=1 and v!=2] for v in l]
为您提供正确的答案:
['是','不','空闲','空闲','空闲']
答案 5 :(得分:2)
也许你想要这个:
l = [1, 2, 3, 4, 5]
print ([['idle','no','yes'][2*(n==1)+(n==2)] for n in l])