파이썬에서 부울의 반대(부정)를 얻으려면 어떻게 해야 합니까?
다음 샘플의 경우:
def fuctionName(int, bool):
if int in range(...):
if bool == True:
return False
else:
return True
두 번째 if-statement를 건너뛸 수 있는 방법이 있습니까?컴퓨터에 부울의 반대를 반환하라고 말하는 것뿐입니다.bool?
부울을 무효화하려면 연산자를 사용할 수 있습니다.
not bool
아니면 당신의 경우에는,if/return블록은 다음으로 대체할 수 있습니다.
return not bool
연산자 우선 순위 규칙과 음수를 기록해야 합니다.is그리고.in연산자: 및 .
연산자(논리적 부정)
아마도 가장 좋은 방법은 연산자를 사용하는 것입니다.not:
>>> value = True
>>> not value
False
>>> value = False
>>> not value
True
그래서 코드 대신에:
if bool == True:
return False
else:
return True
다음을 사용할 수 있습니다.
return not bool
함수로서의 논리적 부정
또한 모듈에는 두 가지 기능이 있으며, 연산자가 아닌 기능으로 필요한 경우 이 기능의 별칭입니다.
>>> import operator
>>> operator.not_(False)
True
>>> operator.not_(True)
False
이것은 술어 함수 또는 콜백이 필요한 함수를 사용하려는 경우 유용합니다.
예를 들어, 또는:
>>> lst = [True, False, True, False]
>>> list(map(operator.not_, lst))
[False, True, False, True]
>>> lst = [True, False, True, False]
>>> list(filter(operator.not_, lst))
[False, False]
물론 동등한 기능을 사용할 경우에도 동일한 기능을 수행할 수 있습니다.lambda함수:
>>> my_not_function = lambda item: not item
>>> list(map(my_not_function, lst))
[False, True, False, True]
비트 단위 반전 연산자 사용 안 함~부울론으로
비트별 반전 연산자를 사용하려고 할 수 있습니다.~또는 동등한 연산자 함수(또는 다른 세 개의 별칭 중 하나).하지만 왜냐하면bool의 하위 클래스입니다.int결과는 "불규칙"을 반환하지 않고 "불규칙 정수"를 반환하기 때문에 예기치 않은 결과일 수 있습니다.
>>> ~True
-2
>>> ~False
-1
그것은True와 동등합니다.1그리고.False로.0그리고 비트 단위 반전은 정수의 비트 단위 표현에서 작동합니다. 1그리고.0.
그래서 이것들은 a를 "부정"하는 데 사용될 수 없습니다.bool.
NumPy 배열(및 하위 클래스)을 사용한 부정
NumPy 어레이(또는 다음과 같은 하위 클래스)를 다루는 경우pandas.Series또는pandas.DataFrame) 불리언을 포함하는 비트와이즈 역연산자 () 실제로 사용할 수 있습니다.~) 배열의 모든 부울을 무효화합니다.
>>> import numpy as np
>>> arr = np.array([True, False, True, False])
>>> ~arr
array([False, True, False, True])
또는 동등한 NumPy 함수:
>>> np.bitwise_not(arr)
array([False, True, False, True])
사용할 수 없습니다.not오퍼레이터 또는operator.notNumPy 어레이에서 작동합니다. 이 어레이는 단일 데이터를 반환해야 하기 때문입니다.bool(불리언 배열이 아님) 그러나 NumPy에는 요소별로 작동하는 논리적 비함수도 포함되어 있습니다.
>>> np.logical_not(arr)
array([False, True, False, True])
이는 비부울 어레이에도 적용할 수 있습니다.
>>> arr = np.array([0, 1, 2, 0])
>>> np.logical_not(arr)
array([ True, False, False, True])
자신의 클래스 사용자 정의
not부름으로써의 일bool값을 계산하고 결과를 부정합니다.가장 단순한 경우에 진실의 가치는 그냥 부를 것입니다.__bool__그 물건에
따라서 구현(또는 Python 2)을 통해 진실 값을 사용자 정의할 수 있으며 따라서 결과는not:
class Test(object):
def __init__(self, value):
self._value = value
def __bool__(self):
print('__bool__ called on {!r}'.format(self))
return bool(self._value)
__nonzero__ = __bool__ # Python 2 compatibility
def __repr__(self):
return '{self.__class__.__name__}({self._value!r})'.format(self=self)
추가했습니다.print메서드를 실제로 호출하는지 확인할 수 있는 문:
>>> a = Test(10)
>>> not a
__bool__ called on Test(10)
False
마찬가지로 다음과 같은 경우 동작을 구현하는 방법을 구현할 수 있습니다.~적용됨:
class Test(object):
def __init__(self, value):
self._value = value
def __invert__(self):
print('__invert__ called on {!r}'.format(self))
return not self._value
def __repr__(self):
return '{self.__class__.__name__}({self._value!r})'.format(self=self)
시와a함께로.print실제로 호출되었는지 확인하기 위해 호출:
>>> a = Test(True)
>>> ~a
__invert__ called on Test(True)
False
>>> a = Test(False)
>>> ~a
__invert__ called on Test(False)
True
단, 그나구중경우인을 __invert__이와 같은 동작은 "일반적인" 파이썬 동작과 다르기 때문에 혼란스러울 수 있습니다.이를 명확하게 문서화하고 상당히 우수한(일반적인) 사용 사례가 있는지 확인합니다.
파이썬은 "아니오" 연산자를 가지고 있죠?그냥 "아니"가 아닌가요?에서 처럼,
return not bool
여기서 허용된 답변이 주어진 시나리오에 가장 정확합니다.
일반적으로 단순히 부울 값을 뒤집는 것에 대해 의문을 품게 했습니다.여기서 받아들여진 해결책은 하나의 라이너로 작동하고 또 다른 하나의 라이너도 작동하는 것으로 나타났습니다.변수 "n"을 부울로 알고 있다고 가정하면, 이를 뒤집는 가장 쉬운 방법은 다음과 같습니다.
n = n is False
그것이 나의 원래 해결책이었고, 그리고 나서 이 질문에서 받아들여진 대답이었습니다.
n = not n
가 더하지만, 저는 에 대해 , 헉헉대며 헉헉대며 .timeit은 알고보에서 밝혀졌습니다.n = not n또한 부울 값을 반전하는 더 빠른 방법입니다.
부울 배열을 비교하면 됩니다.예를들면
X = [True, False, True]
그리고나서
Y = X == False
당신에게 줄 것입니다.
Y = [False, True, False]
토글을 구현하여 영구 코드를 다시 실행할 때마다 부정되도록 하려면 다음과 같이 할 수 있습니다.
try:
toggle = not toggle
except NameError:
toggle = True
이코를실먼다설정다니합음을저면행하드를 합니다.toggleTrue그리고 이 스니펫이 호출될 때마다 토글은 부정됩니다.
같은 결과를 얻을 수 있는 또 다른 방법은 판다 데이터 프레임에 유용하다는 것을 알게 되었습니다.
마우스 세부 정보에 따라 아래에 제시된 바와 같이:
bool(1 - False)
bool(1 - True)
제 생각에 가장 컴팩트한 버전은.
self.foobar ^= 참
이는 전체 이름을 반복할 필요가 없으며 순수한 불리언과 함께 작동합니다.
언급URL : https://stackoverflow.com/questions/7030831/how-do-i-get-the-opposite-negation-of-a-boolean-in-python
'programing' 카테고리의 다른 글
| 응답을 호출할 때 "HTTP 헤더가 전송된 후 리디렉션할 수 없습니다"가 표시되는 이유는 무엇입니까?리디렉션()? (0) | 2023.07.17 |
|---|---|
| flapdoodle Embedded MongoDB 테스트가 실행되지 않는 이유는 무엇입니까? ('embedded MongoServer'를 생성하면 프로세스 EOF를 시작할 수 없습니다.) (0) | 2023.07.17 |
| 자바에서 mongodb 쿼리에서 직접 원시 JSON을 반환하는 방법은 무엇입니까? (0) | 2023.07.17 |
| 오류 가져오기 - ORA-01858: 숫자가 필요한 숫자가 아닌 문자가 발견되었습니다. (0) | 2023.07.17 |
| if 절을 종료하는 방법 (0) | 2023.07.17 |