想想这个例子:

l = [1, 2, 3, 4, 5]

for values in l:
    if values == 1:
        print('yes')
    elif values == 2:
        print('no')
    else:
        print('idle')

而不是打印结果,我想使用一个列表理解来创建一个结果列表,如['yes', 'no', 'idle', 'idle', 'idle']。

如何在列表理解中表示elif逻辑?到目前为止,我只在列表推导式中使用if和else,就像在列表推导式中使用if/else一样。


当前回答

Python的条件表达式就是专门为这种情况设计的:

>>> 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']

其他回答

你可以使用列表推导式来从原始列表中创建另一个列表。

>>> 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']
>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']

Python的条件表达式就是专门为这种情况设计的:

>>> 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']

也许你想要这样:

l = [1, 2, 3, 4, 5] 

print ([['idle','no','yes'][2*(n==1)+(n==2)] for n in l])

另一种简单的方法是像这样使用条件列表推导式:

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

给你正确的答案:

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