все Python 3Списки (list)понятие
Условный list comprehension
comprehension
Фильтрующий if в конце list comprehension отбирает элементы по условию. Не путать с тернарным оператором (if ... else ...) в начале выражения — тот преобразует, а не фильтрует.
Синтаксис
[выражение for x in iterable if условие]
Фильтрующий if ставится после for и идёт без else: [x if x > 0 for x in lst] — SyntaxError, а [x if x > 0 else 0 for x in lst] уже не отбор, а замена значений. Обе конструкции можно совместить в одном выражении — тернарник впереди преобразует, if в конце отбирает.
Примеры
lst = [1, -2, 3, -4, 5]
print([x for x in lst if x > 0]) # → [1, 3, 5]
print([x**2 for x in lst if x % 2 != 0]) # → [1, 9, 25]
words = ["apple", "hi", "banana", "ok"]
print([w for w in words if len(w) > 3]) # → ['apple', 'banana']
print([x if x > 0 else 0 for x in lst]) # → [1, 0, 3, 0, 5] (тернарный)
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности