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

2022. 9. 12. 23:34·Archive/Develop
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
반응형

'Archive > Develop' 카테고리의 다른 글

[ 모던 자바스크립트 스터디 ] 단축 평가  (0) 2022.09.14
[ 모던 자바스크립트 스터디 ] 암묵적 타입 변환 & 명시적 타입 변환  (0) 2022.09.14
[ 모던 자바스크립트 스터디 ] 레이블 문 , 타입 변환과 단축 평가  (0) 2022.09.12
[ 모던 자바스크립트 스터디 ] 자바스크립트 개요, 변수 호이스팅  (0) 2022.09.07
[ NestJS ] TypeORM 기존 테이블 -> entity 생성  (0) 2022.08.19
'Archive/Develop' 카테고리의 다른 글
  • [ 모던 자바스크립트 스터디 ] 단축 평가
  • [ 모던 자바스크립트 스터디 ] 암묵적 타입 변환 & 명시적 타입 변환
  • [ 모던 자바스크립트 스터디 ] 레이블 문 , 타입 변환과 단축 평가
  • [ 모던 자바스크립트 스터디 ] 자바스크립트 개요, 변수 호이스팅
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    백준 파이썬
    javascript
    보안뉴스
    Git
    docker
    장고
    Python
    파이썬
    백준 풀이
    백준
    코드업 기초
    카카오 100일 프로젝트
    자바스크립트
    Django
    파이썬 백준
    파이썬 알고리즘
    코드업
    파이썬 기초
    Codeup
    Oracle
    오라클
    백준 문제풀이
    파이썬 문제
    비박스
    자바스크립트 API
    코드업 파이썬 기초 100제
    자바스크립트 객체
    C++
    oracle db
    파이썬 기초 문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Python ] Dictionary , Set Hash 이용해보자
상단으로

티스토리툴바