Несколько условий IF в понимании списка python
мне было интересно, можно ли поставить несколько if
условия в понимании списка? Я не нашел ничего подобного в документации.
Я хочу иметь возможность сделать что-то вроде этого
ar=[]
for i in range(1,n):
if i%4 == 0: ar.append('four')
elif i%6 == 0: ar.append('six')
else: ar.append(i)
использование понимания списка. Как я могу это сделать?
это вообще возможно? Если это не так, каков был бы самый элегантный (питонический) способ достичь этого?
2 ответов
как о
ar = [('four' if i % 4 == 0 else ('six' if i % 6 == 0 else i)) for i in range(1, n)]
например, если n = 30
это
[1, 2, 3, 'four', 5, 'six', 7, 'four', 9, 10, 11, 'four', 13, 14, 15, 'four', 17, 'six', 19, 'four', 21, 22, 23, 'four', 25, 26, 27, 'four', 29]
ETA: вот как вы могли бы применить список условий:
CONDITIONS = [(lambda i: i % 4 == 0, "four"), (lambda i: i % 6 == 0, "six"),
(lambda i: i % 7 == 0, "seven")]
def apply_conditions(i):
for condition, replacement in CONDITIONS:
if condition(i):
return replacement
return i
ar = map(apply_conditions, range(0, n))
вы можете поместить логику в отдельную функцию, а затем иметь элегантность понимания списка вместе с удобочитаемостью функции:
def cond(i):
if i % 4 == 0: return 'four'
elif i % 6 == 0: return 'six'
return i
l=[cond(i) for i in range(1,n)]