파이썬3의 딕셔너리의 keys() 메서드 반환 값은 리스트가 아니야.

2024. 1. 8. 00:42·프로그래밍

얼마 전 회사에서 코드관련 글 중, 누군가,

 

if a in dict_type.keys():

    블라블라블라~~~

 

는 in 연산 시 선형적으로 탐색하므로 시간 복잡도가 O(n) 된다는 글을 보았다.

파이썬 위키의 시간 복잡도 관련 글 ( https://wiki.python.org/moin/TimeComplexity )에서도 따로 Keys() 메서드에 관한 내용은 없었다.

 

정말 일까? 코드로 테스트해 보았다.\

 

import timeit

test_dict = {x:x*2 for x in range(100000)}
test_list = list(range(100000))

print(type(test_dict.keys()))

print(timeit.timeit(lambda: 999999 in test_dict.keys(), number=10000))
print(timeit.timeit(lambda: 999999 in test_dict, number=10000))
print(timeit.timeit(lambda: 999999 in test_list, number=10000))

 

<class 'dict_keys'>
0.001331400000026406
0.0006685999999263004
10.455946499999982

 

결과 적으로 말하면, dict_type.keys() 의 반환값은 dict_keys 클래스 이고,

이 클래스는 list 클래스와 다르다는 결론이다.

 

그래도 key만 뽑기 위해 뭔가 다른 동작을 하는지, 바로 비교하는 2번째 연산에 비하면,

오래 걸린다.

 

결론 : 딕셔너리의 키 유무를 확인하기 위해 in 연산을 사용할 때는 2번째 처럼 바로 사용하자.

'프로그래밍' 카테고리의 다른 글

BFS 알고리즘 (백준 2021번: 최소 환승 경로)  (0) 2024.08.02
유니온 파인드 알고리즘 (백준 1717: 집합의 표현)  (0) 2024.02.03
다익스트라 알고리즘 (백준 1753번: 최단경로)  (0) 2024.01.23
공간이 연속 할 경우 합치기  (0) 2024.01.22
DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것  (0) 2024.01.10
'프로그래밍' 카테고리의 다른 글
  • 유니온 파인드 알고리즘 (백준 1717: 집합의 표현)
  • 다익스트라 알고리즘 (백준 1753번: 최단경로)
  • 공간이 연속 할 경우 합치기
  • DFS/BFS 구현 시 큐에 넣기 전에 방문 처리 할 것
virbr0.net
virbr0.net
  • virbr0.net
    virbr0.net
    virbr0.net
  • 전체
    오늘
    어제
    • 분류 전체보기
      • SIP
      • HTTP
      • OS
      • 프로그래밍
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    가상화
    URL Rewrite
    SIP
    DFS
    최단경로
    다익스트라
    클라우드
    rtp inject
    RTP
    alteon
    HTTP
    파이썬
    시간복잡도
    chunked
    IIS
    BFS
    인증서
    브로드웍스
    파일명 없이 다운로드
    해외발신
    윈도우서버
    딕셔너리
    SBC
    회사생활
    유기농 배추
    ADC
    셀프칭찬
    파일명
    RDP
    인터넷전화
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
virbr0.net
파이썬3의 딕셔너리의 keys() 메서드 반환 값은 리스트가 아니야.
상단으로

티스토리툴바