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)) 를 해준다면, 출력은 리스트가 된다는 것도 유의해야한다.
'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 |