[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']


답변

언어가 구문 사용을 허용하지 않는 이유

variable = "something" if a_condition

하지 않고는 else경우 여기서,이다 a_condition == False, variable갑자기 알 수 없습니다. 기본값은 None이지만 Python은 모든 변수 할당이 실제로 명시 적 할당을 생성하도록 요구합니다. 이는 함수 호출과 같은 경우에도 적용됩니다. 함수에 전달 된 값 은 할당 문의 RHS 와 같이 평가 되기 때문입니다.

마찬가지로, 모든는 return조건부라고해도 실제로 반환해야합니다 return. 예 :

return variable if a_condition

허용되지 않지만

return variable if a_condition else None

두 번째 예제는 명시 적으로 무언가를 반환하도록 보장되기 때문에 허용됩니다.


답변

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 None


답변

myList.extend(['myString'] if condition else []) 다른 솔루션보다 더 많은 작업이지만 작동합니다.


답변

다음과 같이 할 수 있습니다.

myList.append('myString') if <condition> else False

또는

myList.append('myString') if <condition> else 0


답변

조건에 따라 목록에 선택적 요소를 추가하려면이 작업을 수행합니다.

nums = [
        1,
        2,
        3 if <condition> else None,
        4,
       ]
nums = [i for i in nums if i is not None]

조건이 충족되지 않으면 값을 None으로 바꾼 다음 나중에 None Values없이 목록을 재정의합니다. 이런 식으로 조건이 충족되면 색인을 보존합니다.