Условия в генераторе списков
Почему первый вариант проходит без ошибок, а второй выводит ошибку? Я вчера видел что и такой и такой вариант канает, но не могу найти ту статью. Будьте добры, объясните пожалуйста
Ответы (2 шт):
Автор решения: Namerek
→ Ссылка
a = [x for x in range(10) if x > 5]
# В этом случае все элементы меньше или равные 5 будут пропущены
# А ошибка у Вас здесь, бы забыли значение подмены поставить
# VVVVV
b = [x if x > 5 else None for x in range(10)]
# В этом варианте все элементы меньше или равные 5 будут заменены на None
По просьбе из коммента, но без лямбды ибо нафиг не нужна
c = [x for x in range(10) if x % 2 == 0]
Lambda с фильтром
# так чтобы понятно
d = list(filter(lambda x: x % 2 == 0, range(10)))
# так, чтобы по "феншую"
d = list(filter(lambda x: not x % 2, range(10)))
На правах изврата
criteria = lambda x: x > 5
c = [x for x in range(10) if criteria(x)]
Автор решения: CrazyElf
→ Ссылка
Во втором случае вы пытаетесь использовать тернарный оператор, но он по определению должен состоять из трёх частей, и конкретно в питоне он выглядит как значение_если_истина if условие else значение_если_ложь.
В первом же случае if относится к конструкции списочное сокращение и там никакого else даже и не предусмотрено, поэтому там всё корректно.
