본문 바로가기
Programming/Python

[ Python ] Dictionary , Set Hash 이용해보자

by 코뮤(commu) 2022. 9. 12.
728x90
반응형

Dictionary 와 Set 은 Hash 테이블 구조를 가지고 있다.

그래서 삽입과 삭제, 탐색 하는 연산의 시간복잡도는 O(1) 이다.

 

 

 

 

Set 활용 Tip !

값을 찾기 위해 list 에서 in 을 사용하게 된다면, 해당 연산의 시간 복잡도는 O(n) 일 것이다.

하나의 데이터를 찾기 위해 최대 데이터 개수 n 만큼 순회를 해야한다는 것인데, 이를 set 을 이용하면 좋다!

 

 

간단한 테스트를 위해 주피터노트북을 활용했다.

 

아래 예시는 list 를 하나하나 순회하면서 데이터를 찾는 것이다.

아래 예제는 총 7초의 실행시간을 가졌다.

 

 

 

 

반면 set 을 이용한 아래의 예제는 약 4초의 실행시간을 가졌다.

 

 

 

이렇게 단순한 예제에서도 시간 차이가 꽤 나는 것을 확인할 수 있다.

 

앞으로 리스트 내에서 in 연산을 통하여 검색을 할 때는 set 을 활용하여 해보는 걸 추천한다.

 

 

 

 

 

Dictionary 활용 Tip !

 

딕셔너리에서 없는 키를 참조하면 에러가 난다.

만약 내가 딕셔너리에 item 을 추가하고 싶은데, 해당 키가 없으면 데이터를 추가하고

있으면 출력하려고 한다. 이때는 꼭 in 으로 키가 있는지 확인해야할까?

이를 방지하는 방법으로 setdefault 가 존재한다.

 

활용은 아래와 같이 한다.

 

_dict = {'a' : 1, 'b': 2}

print(_dict.setdefault('c', 0))

 

'c' 라는 키가 있다면 해당 키의 값을 반환하고, 없다면 0이라는 인자를 'c' 키의 값으로 설정한다.

 

 

추가로 이 메소드를 이용한 유사 dictionary 가 있다.

defaultdict 인데, 이는 아마 코테 준비해보신 분들이라면 한번쯤을 활용해봤을 collections 패키지 안에 존재한다.

 

궁금하신 분들은 defualtdict 키워드로 서칭해보시면 좋을 것 같다.

 

 

번외 Sort Tip !

 

초기 파이썬으로 코테를 준비할 때 정렬 시 사용하는 sort()sorted() 가 헷갈렸었다.

그 둘의 차이는 사용하다보면 명확하다.

 

 

sort()리스트를 내부적으로 정렬하는 메소드이다.

sorted()컨테이너형 데이터를 정렬된 리스트로 변환해 돌려주는 함수이다.

 

 

자, 여기서 내가 리스트와 컨테이너형 데이터를 강조한 이유가 있다.

 

기본적으로 set, dictionary 와 같은 hash 테이블을 이용한 구조는 순서라는 개념이 존재하지 않는다.

따라서 내가 a =  {1, 2, 3, 4, 6, 5} 와 같이 선언 했어도

a.sort() 가 불가능하다는 것이다.

 

왜냐? sort 는 리스트를 정렬해주는 메소드이기에!

 

만약 내가 a set 을 정렬하고 싶다면 sorted(a) 식으로 해주는것이 옳은 방법이다.

 

print(sorted(a)) 를 해준다면, 출력은 리스트가 된다는 것도 유의해야한다.

 

 

 

728x90
반응형