🐍Python | Django

[Python] enumerate()

이줭 2022. 5. 25. 21:19
728x90

기본적으로 파이썬에서의 for 루프는 ' for 원소 in 목록: ' 형태로 작성된다. 목록 부분에는 리스트, 튜플, 문자열 등 iterable 한 데이터 타입을 사용할 수 있다.

name = 'Mike'

for s in name:
    print(s)
    
# M
# i
# k
# e

만약, 위와같은 코드에서 각 문자의 인덱스도 함께 출력하고 싶다면 어떤 방법을 사용할 수 있을까? 🤔

먼저 인덱스 변수를 따로 생성하여 인덱스와 함께 출력할 수 있다.

strings = ['a', 'b', 'c']
i = 0

for s in strings:
    print(i, s)
    i += 1
    
# 0 a
# 1 b
# 2 c

위의 방법은 반복문이 끝난 뒤에도 i라는 변수가 그대로 남아있어 이상적인 방법은 아니다.

그렇다면 다음의 방법은 어떨까?

strings = ['a', 'b', 'c']

for i in range(len(strings)):
    print(i, strings[i])
    
# 0 a
# 1 b
# 2 c

이전 코드보다는 나아 보일 수 있지만, 이러한 코드를 두고 흔히 Pythonic하지 않다고 한다. 

파이썬답게 인덱스와 원소를 같이 출력하고자 할 때, 파이썬의 내장 함수인 enumerate()를 이용하면 된다.

strings = ['a', 'b', 'c']

for t in enumerate(strings):
    print(t)
    
# (0, a)
# (1, b)
# (2, c)

for i, s in enumerate(strings):
    print(i, s)
    
# 0 a
# 1 b
# 2 c

위와 같이 enumerate로 감싸고 반복문을 실행하면 tuple형태로 원소가 반환되는 것을 확인할 수 있고, unpacking을 통해 인덱스와 원소를 각각 사용할 수 있다. 만약, 시작인덱스를 변경하고 싶다면 아래와 같이 사용할 수 있다.

strings = ['a', 'b', 'c']

for i, s in enumerate(strings, start=1):
    print(i, s)
    
# 1 a
# 2 b
# 3 c

 

enumerate()는 개인적으로 가장 많이 사용하는 함수 중 하나이다. enumerate를 잘 활용하여 Pythonic🐍한 코드를 작성하자!

 

참고 : https://www.daleseo.com/python-enumerate/

728x90

'🐍Python | Django' 카테고리의 다른 글

[Python] zip()  (0) 2022.05.30
[Python] itertools  (0) 2022.05.26
[Python] Exception 추적  (0) 2022.05.23
[Python] Duck Typing?  (0) 2022.05.22
[Python] Comprehension?  (0) 2022.05.20