728x90

or 연산자와 | 연산자의 차이

들어가며

  • 파이썬(Python)에서 @or@ 연산자와 @|@ 연산자의 차이에 대해 정리해본다.
  • @or@ 연산자와 @|@ 연산자 모두 논리 연산자(Logical Operator)이지만, 사용 목적과 동작 방식에 차이가 있다.

 

@or@ 연산자

  • 유형 : 논리 연산자
  • 논리적 OR 연산을 수행하여, 두 피연산자 중 하나라도 @True@일 경우 @True@를 반환한다.
  • 단축 평가(Short-Circuit Evaluation) : 첫 번째 피연산자가 @True@이면 두 번째 피연산자는 평가되지 않는다.
  • 피연산자 타입 : @bool@ 또는 @bool@로 평가될 수 있는 평가식 (거의 모든 파이썬 객체)
  • 반환값 : @True@ 또는 @False@

 

@|@ 연산자

  • 유형 : 비트 연산자
  • 비트 단위 OR 연산을 수행하여 두 피연산자의 각 비트를 비교하여 하나라도 1이면 1을 반환한다.
  • 피연산자 타입 : 정수형(@int@) 또는 비트 연산을 지원하는 객체(@numpy@ Array, @pandas@ Series)
    • @numpy@의 배열(Array)과 @pandas@의 시리즈(Series) 객체에서는 @or@ 연산자가 아닌 @|@ 연산자를 사용한다!
  • 반환값 : 피연산자와 동일한 타입의 객체 (각 비트의 OR 결과)

 

참고

  • 다음과 같이 @pandas@데이터프레임(또는 시리즈)을 사용하여 논리 연산을 할 때는 @or@ 연산자가 아닌 @|@ 연산자를 사용한다.
import pandas as pd
import numpy as np

df = pd.read_csv('./datasets/P210203.csv')

upper = np.mean(df['charges']) + 1.5 * np.std(df['charges'])
lower = np.mean(df['charges']) - 1.5 * np.std(df['charges'])

range = (df['charges'] >= upper) | (df['charges'] <= lower)   # or 연산자가 아닌 | 연산자 사용

result = df[range].sum()
print(result)

 

728x90