포시코딩

enumerate(list)와 range(len(list)) 비교 본문

Python

enumerate(list)와 range(len(list)) 비교

포시 2022. 12. 25. 04:36
728x90

개요

number = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']

위 list에 대해 for문을 돌려 각각의 index와 value를 얻어내는걸 한다면

enumerate(number)와 range(len(number)) 중 어떤게 더 효율이 좋을까 문득 궁금해졌다.

 

추측

비교를 위해 코드를 쓰다 보니 range(len(number))가 

len()으로 먼저 길이를 구하고 range()로 돌리다보니 좀 더 오래 걸리지 않을까 라는 생각이 들었다.

 

비교 방법 1

이런 생각이 들게 만든 코딩테스트 연습문제에서

두 풀이 방법에 대해 테스트 결과 속도가 얼마나 나오는지를 비교 측정해봤다.

문제: https://school.programmers.co.kr/learn/courses/30/lessons/81301

def solution(s):
    numbers = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    for i, v in enumerate(number):
        s = s.replace(v, str(i))
    return int(s)
def solution(s):
    numbers = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine']
    for i in range(len(numbers)):
        s = s.replace(numbers[i], str(i))
    return int(s)

 

아쉽게도 별 차이를 보이지 못했다.

 

비교 방법 2

timeit 이라는 파이썬 내장 모듈을 이용해봤다.

import timeit

def solution(s):
    start_time = timeit.default_timer() # 시작 시간 체크
    # 비교할 코드
    terminate_time = timeit.default_timer() # 종료 시간 체크  
    print("%f초 걸렸습니다." % (terminate_time - start_time))
    
    return int(s)

이 사이에 비교할 코드를 넣어 걸리는 시간을 구해 비교해봤다.

 

결과

확실히 enumerate를 사용한 방법이 range(len())을 사용한 방법보다

1.5배 ~ 2개 가량 빠른걸 볼 수 있었다.

 

테스트로 이용한 코드가 워낙 간단한거라 걸린 시간이 0.000009초 ~ 0.000020초 사이라 

두 코드가 크게 차이나지는 않다는걸 알 수 있지만

연산 속도에 차이가 난다는건 알 수 있게 되었다.

 

위 결과를 통해 enumerate가 더 연산속도에 있어 유리하다는걸 알 수 있었는데, 

앞으로도 range(len())을 사용해야 하는 코드가 나올 때 enumerate를 사용하는 습관을 들이는건 어떨까?

728x90

'Python' 카테고리의 다른 글

집합 자료형 set  (0) 2022.12.27
lambda, map()  (0) 2022.12.25
zip() 함수로 데이터 엮기  (0) 2022.12.20
공백을 메꿔주는 str.rjust, str.ljust, str.zfill  (0) 2022.12.20
파이썬으로 십진수, 이진수 나타내기  (0) 2022.12.20