본문 바로가기

Python

파이썬 검색 (bisect, dict, set)

dict와 set는 기본적으로 키(key)의 중복을 허용하지 않는다

bisect_left, bisect_right : 이진 탐색을 기반으로 한 함수

정렬된 리스트에서 특정 값의 위치를 찾거나, 그 값을 삽입할 위치를 알려주는 함수

from bisect import bisect_left, bisect_right     #import 해준다

x = [2, 3, 5, 5, 7, 9, 9, 9]

#right에서 left의 값을 빼주면 7이라는 값은 하나가 있다는것을 알 수 있다
print(bisect_left(x, 7, 0, len(x))) #4 출력
print(bisect_right(x, 7, 0, len(x))) #5 출력

#right에서 left의 값을 빼주면 5이라는 값은 두개가 있다는것을 알 수 있다
print(bisect_left(x, 5, 0, len(x))) #2
print(bisect_right(x, 5, 0, len(x))) #4

#없는 값 질문. 
print(bisect_left(x, 6, 0, len(x))) #4 / 값이 존재하지 않으면 6이 삽입해야하는 위치를 반환

 

dict : 키(key)와 값(value)을 쌍으로 저장하고, 키를 통해 값을 빠르게 조회할 수 있는 파이썬의 해시 기반 자료

삽입과 수정, 삭제 방법

#key : 나라명, value(값) : 수도

d = {"대한민국" : "서울", "프랑스" : "파리", "일본" : "동경경"}

#삽입
d["중국"] = "베이징"
print(d)

#수정
d["일본"] = "도쿄"
print(d)

#삭제
del d["중국"]
print(d)

 

출력과 리스트 변환

print(list(d.keys())) #key만 리스트에 삽입
print(list(d.values())) #value만 리스트에 삽입
print(list(d.items())) #튜플의 형태로 key, value가 리스트에 들어감

for key, value in d.items():
    print(key, ":" , value)

 

검색 방법

#검색(존재 유무) in 키워드(연산자)
print("대한민국" in d) #키 검색
print("서울" in d.values()) #value 검색

#검색(키로 검색 -> 밸류 반환) : []
print(d["일본"]) #인덱스 대신 키를 대입

#검색(키로 검색 -> 밸류) : get메서드
print(d.get("한국")) #None 반환
print(d.get("한국", "존재하지 않는 나라입니다")) #존재하지 않는 나라입니다 반환
print(d.get("대한민국", "존재하지 않는 나라입니다")) #서울 반환

 

set : 값(=키)만 저장하는 해시 기반 자료형. ( dict에서 값 없이 키만 있는 버전 )

st = set() / 비어있는 set 생성

st = {20, 30, 10, 20}

#추가
st.add(40)
st.add(40)

print(st) # 20, 30, 10, 40 중복 불가

#삭제
st.remove(20)

#(빠른)검색 : 리스트에 in을 사용하면 O(n), set, dict에 사용하면 O(1)
print(20 in st)