Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Bull
- AWS
- game
- nodejs
- 게임
- class
- Dinosaur
- mongoose
- typeORM
- OCR
- Nest.js
- nestjs
- JavaScript
- MongoDB
- jest
- GIT
- flask
- react
- 공룡게임
- 자료구조
- Express
- Queue
- 정렬
- MySQL
- Python
- TypeScript
- Sequelize
- dfs
- cookie
Archives
- Today
- Total
포시코딩
enumerate(list)와 range(len(list)) 비교 본문
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 |