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