728x90
반응형
1. range
보통 루프가 필요할 때 range를 많이 사용한다.
flavor_list = ['바닐라', '초콜릿', '피칸', '딸기']
for flavor in range(len(flavor_list)):
flavor = flavor_list[i]
print(f'{i + 1}: {flavor}')
>>>
1: 바닐라
2: 초콜릿
3: 피칸
4: 딸기
위 코드는 다소 투박해 보인다. list의 길이를 알아야 하고, 인덱스를 사용해 배열 원소에 접근해야 한다.
2. enumerate
enemerate는 이터레이터를 지연 계산 제너레이터(lazy generator)로 감싼다. enumerate는 루프 인덱스와 이터레이터의 다음 값으로 이뤄진 쌍을 넘겨준다(yield).
enumerate가 넘겨주는 각 상을 for 문에서 간결하게 언패킹할 수 있고 이로써 코드가 훨씬 깔끔해진다.
for i, flavor in enumerate(flavor_list):
print(f'{i + 1}: {flavor}')
>>>
1: 바닐라
2: 초콜릿
3: 피칸
4: 딸기
한편, 두 번째 파라미터로 어디부터 수를 세기 시작할지 지정할 수 있고 이를 활용하면 코드를 더 깔끔하게 만들 수 있다.
for i, flavor in enumerate(flavor_list, 1):
print(f'{i}: {flavor}')
3. 요약
- enumerate를 사용하면 이터레이터에 대해 루프를 돌면서 이터레이터에서 가져오는 원소의 인덱스까지 얻는 코드를 간결하게 작성할 수 있다.
- range에 대해 루프를 돌면서 시퀀스의 원소를 인덱스로 가져오기보다는 enumerate를 사용하라.
- enumerate의 두 번째 파라미터로 어디부터 원소를 가져오기 싲가할지 지정할 수 있다(디폴트 값은 0이다).
728x90
반응형