궁금증 연구소

안녕하세요. 궁금증연구소입니다.

오늘 포스팅 주제는 "파이썬 and & 차이점"입니다.

 

파이썬으로 유명한 자료구조인 heap을 구현해보았습니다.

heap 구현 중에 자꾸 out of index 오류가 발생하여 원인을 파악하던 중, 파이썬에서는 논리 연산자 기호가 &가 아니라 

영문 and라는 것을 알게 되었습니다.

 

def heapify(tree: list, root_index: int, tree_size : int) :
    
    left_child_index = root_index*2
    right_child_index = root_index*2 +1
    
    max_index = root_index
    
    if 0 < left_child_index < tree_size & tree[left_child_index] > tree[max_index] :
        max_index = left_child_index
    if 0 < right_child_index < tree_size and tree[right_child_index] > tree[max_index] :
        max_index = right_child_index
        
    if max_index != root_index :
        tree[max_index] , tree[root_index] = tree[root_index], tree[max_index]
        heapify(tree, max_index, tree_size)
    
    
tree = [None, 15, 5, 12, 14, 9, 10, 6, 2, 11, 1]  # heapify하려고 하는 완전 이진 트리
heapify(tree, 2, len(tree))  # 노드 2에 heapify 호출
print(tree)

파이썬에서의 &는 비트 연산자로 기능하고, c언어의 논리 연산자 &&를 표현하기 위해서는 영어 and를 사용해야 합니다.

 

 

and 키워드

heapify 코드에서 위 코드를 and로 적용하면, 아래와 같이 max heap이 적용된 결과를 얻을 수 있지만

and 연산자 결과

 

& 연산자를 적용하면 잘못된 결과가 도출된다.

&연산자 키워드
결과2

 

 

타언 어를 사용하다 파이썬을 쓰게 되면 착각할 수 있는 부분이니 and와 &를 혼동하지 않도록 하는 것이 좋다.

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading