использование условного выражения с пониманием списка - PullRequest
1 голос
/ 04 августа 2020

Я изучаю основы программирования python и борюсь с тем, что может показаться мне простым, но запутанным. У меня есть список my_list, и я хотел бы вычесть 3, только из чисел больше 9

my_list = [1, 2, 30, 4, 5, 60, 7, 80]

, когда я пробую это, я получаю синтаксическую ошибку:

print([x - 3 if x > 9 for x in my_list])

но добавление бесполезного условного оператора else в конце условия if заставляет его работать:

print([x - 3 if x > 9 else x + 0 for x in my_list])

Если бы я сделал это более длинным способом:

for j in range(len(my_list)):
    if my_list[j] > 9:
        my_list[j] = my_list[j] - 3
print(my_list)   

Я бы не требуется условие else, чтобы эта работа работала. Это подводит меня к вопросам; Требуется ли предложение else для использования условных выражений с пониманием списка? Если нет, как мне заставить его работать без использования else?

Ответы [ 2 ]

2 голосов
/ 04 августа 2020

Вам нужен else в понимании списка, потому что он должен знать значение, которое должно возвращаться в результате для каждого элемента, который повторяется. Автоматического c по умолчанию возврата самого элемента нет. Таким образом, условное выражение должно предоставлять значения, когда условие истинно, а также когда оно ложно.

Это не обязательно в for l oop, потому что оно ничего не возвращает, оно выполняет операторы. Вы изменяете список на месте в операторе if и вообще ничего не делаете, когда условие не выполняется. Но в условном выражении нет такой вещи, как «вообще ничего не делать».

Если вы хотите вернуть значение без изменений, используйте else x - нет необходимости добавлять 0.

0 голосов
/ 04 августа 2020

Просто сделайте следующее:

print([x - 3 if x > 9 else x for x in my_list])
...