Вопрос №55279 от пользователя Renata M в уроке «Генераторы списков», курс «Python: Декларативное программирование»

Renata M

Почему в тестовом вопросе о добавлении нечестных элементов в список ответ [xs.append(y) for y in ys if y % 2 == 1]является неверным?

4 0

Aleksei Pirogov

Потому что append меняет исходный список по месту, а возвращает None. Таким образом вы и декларативность теряете, и получаете ненужный список [None, None, ...]. То есть результат вычисления list comprehensions оказывается бесполезен и код по сути просто является странным вариантом обычного императивного - меняющего состояние - цикла for .. :.

0

Renata M

Aleksei Pirogov, У меня не получается вывод, о которым вы говорите: я получаю такой вывод

0

Aleksei Pirogov

Где вы смотрите вывод?

По скриншоту могу предположить, что это Jupyter Notebook. Но в этом случае вы видите только результат вычисления последнего выражения, то есть xs.

Вот как это выглядит в обычном REPL:

>>> ys = range(10)
>>> xs = []
>>> [xs.append(y) for y in ys if y % 2 == 1]
[None, None, None, None, None]
>>> xs
[1, 3, 5, 7, 9]

Выражение [xs.append(...)..] вычисляется в список None. И при этом модифицирует изменяемый объект xs, который ещё и создать заранее нужно. Так использовать list comprehensions не принято. Потому что назначение генераторов списков - генерация новых списков, а не изменение существующих.

0

Михаил Акишев

а если в решении автора "for one_list in" расположить на предыдущую строку, то можно избавиться от ошибки линтера WPS335. Что, мне кажется, логично - множество поиска (список) переносить на отдельную строку для единообразия со строкой 4: truths for truths in. (https://ru.hexlet.io/code_reviews/558870 - нейминг ток чур не смотреть, там швах))

0

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
25 мая 10 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
25 мая 10 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
25 мая 10 месяцев
Иконка программы Fullstack-разработчик
Профессия
Новый
Разработка фронтенд и бэкенд компонентов веб-приложений
25 мая 16 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
25 мая 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Создает веб-приложения со скоростью света
25 мая 5 месяцев