Как в генератор списка добавить условие?

пытался сделать так, но не работает

a = [int(input()) for i in range(5) if i % 10 == 0]

то есть нужно добавить условие, чтобы в список добавлялись только числа делящиеся на 10 без остатка


Ответы (3 шт):

Автор решения: Stanislav Volodarskiy

Разделите чтение и фильтрацию:

a = [i for i in (int(input()) for _ in range(5)) if i % 10 == 0]
#    ---------- ================================ --------------
#        ^          читаем пять целых чисел            ^
#        |                                             |
#        -----------------------------------------------
#                   отбираем кратные десяти

Тоже самое по частям:

# читаем пять целых чисел
# важное: мы их не читаем. Генератор ничего не читает пока его не попросят.
g = (int(input()) for _ in range(5))

# просим генератор прочитать числа и фильтруем их
a = [i for i in g if i % 10 == 0]
→ Ссылка
Автор решения: extrn

Не очень наглядно, но за неимением отдельной синтаксической конструкции для связывания значения с переменной внутри генератора (вроде let в Haskell) можно использовать

a = [
  x
  for _ in range(5)
  for x in [int(input())]
  if x % 10 == 0
]
→ Ссылка
Автор решения: Danis

можно попробовать так, но это будет работать только на Python 3.8+

a = [n for i in range(5) if (n := int(input())) % 10 == 0]
→ Ссылка