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🐍한 코드를 작성하자!
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 |