반응형
range보다는 enumerate를 사용하라고 한다.
파이썬의 range 내장 함수는 정수 시퀀스를 순회하는 루프를 만들 때 아주 유용하다. 실제로 지금까지 많이 써오기도 했다.
하지만 리스트의 위치에 대한 오프셋을 생성하는 경우를 살펴보도록 하자.
다음은 가장 좋아하는 아이스크림 맛의 순위를 출력하는 코드를 range로 작성한 것이다.
flavor_list = ["vanilla", "chocolate", "pecan", "strawberry"]
for i in range(len(flavor_list)):
flavor = flavor_list[i]
print(f"{i + 1}: {flavor}")
물론 코드는 잘 작동하지만, 리스트의 길이를 알아낸 후 배열에 인덱스로 접근하여 값을 가져오는 과정이 필요하다.
그렇다면 좀 더 파이써닉한 enumerate를 사용하면??
for i, flavor in enumerate(flavor_list):
print(f"{i + 1}: {flavor}")
enumerate는 지연 제너레이터(lazy generator)로 어떤 이터레이터(iterator)든 감싸서, 루프 인덱스와 이터레이터의 다음 값을 쌍으로 넘겨준다.
또한, enumerate는 카운트를 시작할 숫자를 지정할 수 있는 기능을 두 번째 파라미터로 제공하기도 하니 참고하면 좋다.
# 1부터 카운트를 시작하도록 설정
for i, flavor in enumerate(flavor_list, 1):
print(f"{i}: {flavor}")반응형
'EffectivePython_125' 카테고리의 다른 글
| [19] Avoid else Blocks After for and while Loops (3) | 2026.03.19 |
|---|---|
| [18] Use zip to Process Iterators in Parallel (3) | 2026.03.18 |
| [16] Prefer Catch-All Unpacking over Slicing (2) | 2026.03.11 |
| [15] Avoid Striding and Slicing in a Single Expression (3) | 2026.03.10 |
| [14] Know How to Slice Sequences (3) | 2026.03.09 |