Можно ли сделать это в одной строке в Python?
if <condition>:
myList.append('myString')
Я пробовал тернарный оператор:
myList.append('myString' if <condition>)
но моей IDE ( MyEclipse ) он не понравился без else.
Можно ли сделать это в одной строке в Python?
if <condition>:
myList.append('myString')
Я пробовал тернарный оператор:
myList.append('myString' if <condition>)
но моей IDE ( MyEclipse ) он не понравился без else.
Ответы:
Да, ты можешь это сделать:
<condition> and myList.append('myString')
Если <condition>ложно, тогда произойдет короткое замыкание, и правая сторона не будет оцениваться. Если <condition>истинно, тогда правая часть будет оценена, и элемент будет добавлен.
Я просто отмечу, что выполнение вышеизложенного не является питоническим, и, вероятно, было бы лучше написать это, независимо от того:
if <condition>: myList.append('myString')
Демонстрация:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one lineзначит, тоже не питонический ...;)
x = object.get('attribute')в этом случае
Причина, по которой язык не позволяет использовать синтаксис
variable = "something" if a_condition
без elseэтого, в случае, когда a_condition == False, variableвнезапно неизвестно. Возможно, это может быть по умолчанию None, но Python требует, чтобы все назначения переменных действительно приводили к явным назначениям. Это также относится к таким случаям, как ваш вызов функции, поскольку значение, переданное функции, оценивается так же, как RHS оператора присваивания.
Точно так же все returns должны фактически возвращаться, даже если они условны return. Например:
return variable if a_condition
не допускается, но
return variable if a_condition else None
разрешено, поскольку второй пример гарантированно что-то возвращает.
variable=Noneявляется совершенно законной. : D
continue if i == 0в цикле for.
else pass?
else passне работает, потому что тернарное выражение должно возвращать значение, которое можно передать return. passне является допустимым returnзначением.
if a_condition: variable = "something"и if a_condition: return variableзаконны. Таким образом, это, по сути, произвольный синтаксический выбор python.
if <condition>: myList.append('myString')
В противном случае нет. Зачем нужно ставить в одну строчку?
Обратите внимание, что «тернарный оператор» - это оператор . Как и любой оператор, он должен что-то возвращать , так как же у вас может быть тернарный оператор без elseпредложения? Что он должен вернуть, если условие не соответствует истине?
Вы в основном запрашиваете do_thing() if <condition> else passконструкцию (которая бросит SyntaxError, если запустится). Как я обнаружил во время исследования (в некоторой степени) подобный вопрос do_thing() if condition else None настолько близок, насколько вы можете получить (это просто еще один способ сделать <condition> and do_thing()). Итак, чтобы обобщить эту идею и другие ответы, вот ваши варианты:
if <condition>: myList.append('myString') - кажется наименее хакерским (и, следовательно, предпочтительным) способом<condition> and myList.append('myString')myList.append('myString') if <condition> else NonemyList.extend(['myString'] if condition else []) тоже будет работать, хотя это больше работы, чем другие решения.
Вы можете сделать что-то вроде этого:
myList.append('myString') if <condition> else False
или же
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _Но если вы ничего не назначаете, не имеет значения. Я обеспокоен тем, что этот человек пытается составить список с аналогичной логикой.
Я бы просто сделал это, если хочу добавить необязательные элементы в список на основе условия.
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
это просто заменяет значение на None, если условие не выполняется, а затем переопределяет список без значений None. таким образом они сохраняют свой индекс, если выполняется условие