列表理解条件中的`elif`

时间:2012-04-03 05:16:30

标签: python list

我们可以在列表理解中使用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']

到目前为止,我只在列表理解中使用了ifelse

6 个答案:

答案 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])