티스토리 뷰

python

[토막상식] A little more on enumerate()

게으른 the lazy 2021. 4. 24. 16:53

 

※ 본 글은 realpython의 정기메일 내용을 편집, 각색 및 내용추가한 것입니다.

 


 

C나 Java를 먼저 배운 분이라면 시퀀스의 아이템에 인덱스를 아래와 같은 형태로 붙일 것입니다.

for i in range(len(my_items)):
    print(i, my_items[i])

 

파이썬에는 이 코드를 간단히 만들어주는 함수가 있습니다. 바로 enumerate()입니다.

names = ['Antonio', 'Carlos', 'Jobim']
for index, value in enumerate(names):
    print(f'{index}: {value}')

 

enumerate()의 기본 기능은 시퀀스의 각 아이템에 인덱스를 부여하는 카운터 변수를 자동생성해주는 것입니다. 위 코드에서는 index가 그 카운터 변수가 됩니다. 

 

enumerate()는 시작 인덱스를 지정할 수도 있습니다.

names = ['Antonio', 'Carlos', 'Jobim']
for index, value in enumerate(names, 1):
    print(f'{index}: {value}')


enumerate()는 이터러블과 시작 인덱스를 받아서 enumerate 객체를 반환하는 함수입니다.[1] enumerate()의 내부동작은 사실 이터레이터로 구현되어 있습니다. 게으른 평가(lazy evaluation)를 이용하므로 메모리를 적게 쓰고 속도도 빠릅니다.

 

enumerate 객체는 이터레이터이므로 아래와 같은 구현이 가능합니다.

 

즉, 이터레이터인 enumerate 객체는 요청이 들어올 때마다 (index, element) 형태의 튜플을 순서대로 반환합니다. 그리고 이 튜플은 튜플 언패킹을 통해 for-in 구문에 활용됩니다.

names = ['Antonio', 'Carlos', 'Jobim']
for index, value in enumerate(names): # unpack an (index, element) into index and value
    print(f'{index}: {value}')

 

참고로, 내장함수인 reversed()도 주어진 시퀀스의 아이템을 뒤에서부터 내놓는 이터레이터를 만듭니다.

 

 

- 게으른 파이썬

 

 

Ref.

[1] www.bitdegree.org/learn/python-enumerate

댓글