Несколько операторов if в понимании списка с одним итератором

Я изучал понимание списка и наткнулся на возможность добавления нескольких условий. Я не знаю, какое поведение я ожидал, но я не могу объяснить, что я получаю. Почему 1 превращается в 3, 2 остается в 2, а 3 превращается в 6?

a = [x if x % 2 == 0 else x * 2 if x % 3 == 0 else x * 3 for x in range(1, 11)]

Выход:

[3, 2, 6, 4, 15, 6, 21, 8, 18, 10]

Вы должны хотя бы попытаться объяснить код, который вы написали.

Scott Hunter 17.02.2023 14:48

Обратите внимание, что это не столько «стандартное» условие, используемое при распознавании списка (которое фильтрует ввод, поэтому вывод обычно содержит меньше элементов), а вложенное троичное условие. Этот пример можно использовать и за пределами понимания списка.

9769953 17.02.2023 14:52

Это также попадает в категорию: не делайте этого, если только вы не пытаетесь принять участие в запутанном конкурсе Python (для которого это плохая запись, но все же).

9769953 17.02.2023 14:54
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Библиотека для работы с мороженым
Библиотека для работы с мороженым
Лично я попрощался с операторами print() в python. Без шуток.
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Эмиссия счетов-фактур с помощью Telegram - Python RPA (BotCity)
Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит...
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Учебник по веб-скрапингу
Учебник по веб-скрапингу
Привет, ребята... В этот раз мы поговорим о веб-скрейпинге. Целью этого обсуждения будет узнать и понять, что такое веб-скрейпинг, а также узнать, как...
Тонкая настройка GPT-3 с помощью Anaconda
Тонкая настройка GPT-3 с помощью Anaconda
Зарегистрируйте аккаунт Open ai, а затем получите ключ API ниже.
2
3
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Для 1 это выглядит так:

1 % 2 = 1, так что это относится к пункту else,

1 % 3 = 1, так что это также относится к пункту else

И он попадает в x*3 который 1*3 = 3

Когда вы пишете x if condition else y, вы получаете x, только если условие истинно. Итак, поскольку условие ложно, вы переходите к пункту else. Вы можете посмотреть на это так:

x if x % 2 == 0 else (x * 2 if x % 3 == 0 else x * 3) for x in range(1, 11)
Ответ принят как подходящий

Переписывание в виде цикла и преобразование условных выражений в полные операторы if/elif/else может помочь объяснить это:

a = []
for x in range(1, 11):
    if x % 2 == 0:
        temp = x
    elif x % 3 == 0:
        temp = x * 2
    else:
        temp = x * 3
    a.append(temp)

Другие вопросы по теме