`elif` в списке условных выражений - PullRequest
89 голосов
/ 03 апреля 2012

Можем ли мы использовать 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 в понимании списка.

Ответы [ 6 ]

187 голосов
/ 03 апреля 2012

Условные выражения 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']

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

43 голосов
/ 03 апреля 2012
>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']
21 голосов
/ 03 апреля 2012

Вы можете сортировать.

Обратите внимание, что при использовании синтаксиса, например:

['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.

2 голосов
/ 05 февраля 2018

Может быть, вы хотите это:

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

print ([['idle','no','yes'][2*(n==1)+(n==2)] for n in l])
2 голосов
/ 25 сентября 2014

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

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

дает правильный ответ:

['yes', 'no', 'idle', 'холостой ход »,« холостой ход »]

2 голосов
/ 03 апреля 2012

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

>>> 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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...