Подтвердить что ты не робот

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

Можно ли включить elif в наш список, похожий на код выше?

Например, ответ вроде:

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

До сих пор я использовал только if и else в понимании списка.

4b9b3361

Ответ 1

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

Надеюсь, что это поможет: -)

Ответ 2

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

Ответ 3

Вы можете, вроде.

Обратите внимание, что когда вы используете 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.

Ответ 4

Вы можете использовать понимание списка, вы собираетесь создать другой список из оригинала.

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

Ответ 5

Еще один простой способ - использовать условное понимание списка следующим образом:

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