Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 in 연산자 속도를 높이는 방법: 리스트 대신 세트·딕셔너리 활용하기

파이썬의 in 연산자는 리스트(list)에서 매우 느린 성능을 보입니다. 시간 복잡도가 O(n)이기 때문인데, 찾고자 하는 요소를 발견할 때까지 리스트를 처음부터 끝까지 순회해야 하기 때문입니다.

반면 세트(set)나 딕셔너리(dict)처럼 해시 기반으로 구현된 자료구조를 사용하면 평균 O(1)의 시간 복잡도로 동일한 결과를 얻을 수 있습니다. 해시 테이블은 키를 직접 계산해 값에 접근하므로 조회 속도가 매우 빠릅니다.

사용 예제

# 느린 방식: O(n)
my_list = [1, 2, 3, 4, 5]
if 3 in my_list:
    print("찾았습니다!")

# 빠른 방식: O(1)
my_set = {1, 2, 3, 4, 5}
if 3 in my_set:
    print("찾았습니다!")

주의할 점: 삽입 비용 고려하기

다만 이러한 속도 향상은 데이터 구조의 종류와 사용 상황에 따라 달라집니다. 세트와 딕셔너리에서의 조회(lookup)는 빠르지만, 삽입(insertion) 과정에서는 해시 계산과 메모리 관리 등 추가 비용이 발생해 리스트보다 더 많은 시간이 걸릴 수 있습니다.

따라서 데이터를 한두 번만 검색하는 경우라면 리스트를 세트로 변환하는 오버헤드가 오히려 손해가 될 수 있습니다. 반대로 동일한 컬렉션에서 여러 번 검색해야 한다면, 처음 한 번 변환 비용을 감수하고 세트나 딕셔너리를 사용하는 것이 큰 이득입니다.

결국 어떤 자료구조를 선택할지는 조회와 삽입 작업의 빈도를 종합적으로 고려해 결정해야 하며, 반복적인 멤버십 검사가 많은 코드라면 해시 기반 자료구조로의 전환이 가장 효과적인 최적화 방법 중 하나입니다.