range 함수를 쓰는 경우는 주로 '숫자나 문자열'의 리스트를 순회(iterate)하는 루프를 실행할 때이다.
하지만 종종 리스트의 인덱스를 함께 산출해야 하는 경우가 있다. 이런 상황에선 range 함수보단 enumerate 함수가 좀 더 효율적이다.
아래 두 코드는 같은 결과를 산출하지만 위에는 range 함수를, 아래에는 enumerate 함수를 사용하였다.
range 함수는 len()함수를 통해 list의 길이를 알아야하고, 인덱스를 사용해[i] 배열 원소에 접근해야 한다.
enumerate 함수는 그렇지 않다.
enumerate는 이터레이터를 지연 계산 제너레이터(lazy generator)로 감싸 루프 인덱스와 이터레이터의 다음 값으로 이뤄진 한 쌍을 넘겨준다.
따라서 for 문에서 간결하게 언패킹할 수 있다.
또한, 출력할 때 어디부터 수를 세기 시작할 지 지정할 수 있다. (디폴트 값은 0)
위에는 숫자를 지정하지 않았기에 0부터 출력되었고, 아래 코드는 1로 지정하여 1부터 숫자가 카운트되었다.
두 함수 모두 동일한 결과를 산출하였으나, range 함수를 사용할 때는 line을 인덱스를 사용해 접근해야 한다.
위처럼 리스트의 인덱스가 함께 필요할 경우 enumerate 함수를 사용하는 것이 코드가 간결해진다.
[요약]
1. enumerate를 사용하면 이터레이터에 대해 루프를 돌면서 원소의 인덱스까지 간결하게 가져올 수 있다.
2. enumerate의 두 번째 파라미터로 어디부터 수를 세기 시작할 지 지정할 수 있다.