Ответ 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']
Надеюсь, что это поможет: -)
Можно ли использовать 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
в понимании списка.
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']
Надеюсь, что это поможет: -)
>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']
Вы можете, вроде.
Обратите внимание, что когда вы используете 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.
Вы можете использовать понимание списка, вы собираетесь создать другой список из оригинала.
>>> 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']
Еще один простой способ - использовать условное понимание списка следующим образом:
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']