안녕하세요. 궁금증연구소입니다.
오늘 포스팅 주제는 "파이썬 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를 사용해야 합니다.
heapify 코드에서 위 코드를 and로 적용하면, 아래와 같이 max heap이 적용된 결과를 얻을 수 있지만
& 연산자를 적용하면 잘못된 결과가 도출된다.
타언 어를 사용하다 파이썬을 쓰게 되면 착각할 수 있는 부분이니 and와 &를 혼동하지 않도록 하는 것이 좋다.
오늘 배운 파이썬[1] (0) | 2022.12.08 |
---|---|
파이썬 얕은 복사와 깊은복사 개념 정리 (0) | 2022.12.03 |
파이썬에서 2차원 배열 리스트 초기화는 리스트 컴프리헨션 이용 (1) | 2022.11.22 |
pandas 데이터분석 머신러닝<오승환> ch02 정리 (0) | 2022.11.20 |
파이썬 머신러닝 판다스 데이터분석 chapter1 정리 (0) | 2022.11.19 |