프로그래밍을 하다보면 for루프를 사용할 때가 많습니다. 많은 프로그래밍 언어들에서는 색인(index) 변수를 증가시키면서 루프를 돌리는데요.
파이썬은 조금 다르게 enumerate() 라는 내장 함수가 있기 때문에 색인(index) 변수를 사용하지 않아도 간단하고 편리하게 루프를 실행 할 수 있습니다.
본 포스팅에서는 파이썬의 enumerate() 내장 함수에 대해 알아보겠습니다.
일반적인 for루프
먼저, enumerate() 함수를 사용해야 하는 이유를 알아보기 위해 일반적으로 for 루프를 실행하는 방식에 대해 알아보겠습니다.
for 요소 in 자료형:
for 루프는 위와 같은 형태로 작성되는데요. 여기서 자료형에는 순회(iterable) 가능한 리스트(list), 튜플(tuple), 문자열(string), 딕셔너리(dictionary) 등의 자료구조를 의미합니다.
for 루프가 실행되는 동안 자료형들이 담고 있는 하나하나의 객체는 요소 변수에 할당되어 접근 가능합니다.
예시로,
cars = ["BMW", "BENZ", "HYUNDAI", "KIA"]
for car in cars:
print(car)
요소와 함께 색인(index)도 같이 출력을 하려면 range() 와 len() 내장 함수를 이용해서 할 수 있습니다.
cars = ["BMW", "BENZ", "HYUNDAI", "KIA"]
for index in range(len(cars)):
print(index, cars[index])
이렇게 내장 함수들을 이용하여 for 루프를 색인과 요소를 함께 뽑아줄 수 도 있지만, 다소 복잡하며, Pythonic한 코드라고 볼 순 없습니다.
Pythonic for루프 (Feat. enumerate())
for루프를 사용할때 요소와 색인 둘 다 접근하는 제일 좋은, 제일 pythonic한 방식은 enumerate() 내장 함수를 사용하는 것입니다.
정말 간단하게 ‘in’ 뒤에 오는 자료형을 enumerate() 함수에 인자로 넣어주면 됩니다.
for 요소 in enumerate(자료형):
예시로,
cars = ["BMW", "BENZ", "HYUNDAI", "KIA"]
for car in enumerate(cars):
print(car)
위 예시를 통해 볼 수 있듯이 기본적으로 enumerate() 함수는 색인과 요소를 포함한 튜플(tuple) 자료형을 생성합니다. 만약 색인과 요소를 하나의 튜플이 아닌 각자의 변수에 할당하고 싶다면 인자 풀기(unpacking)을 해야 합니다.
cars = ["BMW", "BENZ", "HYUNDAI", "KIA"]
for index, car in enumerate(cars):
print(index, car)
시작 색인(index) 변경
enumerate() 함수는 시작 색인을 변경할 수 있는 start 옵션이 있습니다. 시작 색인을 0이 아닌 1이나 다른 숫자로 변경하고 싶다면, start=’원하는 시작 색인’을 함수를 호출할 때 넣어주면 됩니다.
cars = ["BMW", "BENZ", "HYUNDAI", "KIA"]
for index, car in enumerate(cars, start=1):
print(index, car)
이렇게 enumerate() 함수 안에 ‘start=1’ 옵션을 cars 리스트 옆에 ‘ , ‘으로 구분해서 넣어주면, 시작 색인이 0이 아닌 1로 시작하는 것을 확인할 수 있습니다.
파이썬 enumerate() 예제 모음
튜플
my_tuple = ("A", "B", "C", "D", "E")
for index, element in enumerate(my_tuple):
print(index, element)
문자열
my_string = " example! "
for index, element in enumerate(my_string):
print(index, element)
딕셔너리
my_dictionary = {"a": "apple", "b": "banana", "c": "cherry", "d": "durian"}
for index, element in enumerate(my_dictionary):
print(index, element)
딕셔너리에 enumerate() 함수를 사용하면, 색인과 요소의 키(key)만 접근 가능하고 값(value)은 접근 할 수 없습니다.
결론
본 포스팅에서는 파이썬 내장 함수 enumerate()를 사용하여 for 루프를 색인과 요소를 동시에 접근하는 방법에 대해 알아 보았습니다.
enumerate() 함수는 순회(iterable) 가능한 객체의 색인 값과 해당 객체 값을 반환합니다.
Pythonic한 코드를 작성하고 싶다면 필수적으로 알고 있어야 하는 함수가 아닌가 싶습니다.