개발일기

Python - for 반복문과 enumerate 함수 본문

프로그래밍 언어/Python

Python - for 반복문과 enumerate 함수

Flashback 2021. 11. 26. 11:15
728x90
반응형

Python의 for반복문 종류

다른 언어에는 반복문 관련하여 for, foreach, for in 등 다양한 양식의 for 반복문이 존재한다. 하지만 파이썬에서는 for in 한가지 방식의 for 반복문을 제공한다.

 

for in 반복문 구조

for 원소 in 문자열, 튜플 등의 리스트 형식의 목록 변수 :
    ... 수행할 구문1 ...
    ... 수행할 구문2 ...

 

for in 반복문

sample = [7, 9, 2, 9, 2, 5] # for in문에 사용할 리스트 변수

for i in sample:
    print(i)
    
# 7
# 9
# 2
# 9
# 2
# 5
# 결과

파이썬의 for in 반복문은 반복이 진행되면서 리스트의 값이 변수에 할당된다. ( 위의 구조에 따르면 i에 sample의 값들이 순서에 따라 매 반복마다 할당된다.) 반복문을 통해 인덱스값을 추출하고자 하는 경우도 있을 것이다. 인덱스값을 추출하기 위해서는 range, len, enumerate 등의 방법을 for문과 같이 사용하여 추출할 수 있다.

 

  • range() : 범위를 지정 후, 설정된 증감값에 따라 값을 반환하는 파이썬 내장함수
  • len() : 변수의 길이를 반환하거나 리스트 요소의 값을 반환하는 파이썬 내장함수
for i in range(len(sample)):
    print(i) # 인덱스
    print(sample[i]) # 해당 인덱스에 해당하는 값

len()을 통해 리스트 요소의 갯수를 구한 후,  range()함수에 넣어준다.  range()함수에 인자가 하나만 들어가 있는 경우에는 시작값이 0으로 설정되고 마지막 끝값이 입력된 인자로 설정된다. 증감값은 자동으로 1로 설정된다. 이러한 range()와 len()의 활용을 통해 변수 i에는 인덱스값이 설정되고 그에 따라 인덱스와 값을 추출해 낼 수 있도록 구현할 수 있다. 이러한 방식이 약간 복잡할 수도 있다. 파이썬은 enumerate라는 내장함수를 제공하여 반복문을 사용할시, 인덱스와 값을 추출할 수 있도록 도와주는 기능을 내포하고 있다.


Enumerate 함수

사용법은 리스트 변수를 enumerate() 함수로 감싸주면 된다.

# 인덱스와 값을 추출해 내기 위해 변수 2개를 선언하여 for문에 추가한다.
for key, value in enumerate(sample):
    print(key) # 인덱스 키값
    print(value) # 해당 인덱스의 값
    
# 결과
# 0 7
# 1 9
# 2 2
# 3 9
# 4 2
# 5 5

 

인덱스가 0이 아닌 특정 번호에서 시작하고자 하게 할 경우 enumerate의 start값을 지정하여 시작 인덱스를 변경할 수 있다. 하지만 sample 변수로 부터 추출되는 값은 처음부터 반환된다.

for key, value in enumerate(sample, start=2):
    print(key, value)
    
# 결과
# 2 7
# 3 9
# 4 2
# 5 9
# 6 2
# 7 5

# 인덱스값은 2부터 시작하지만 반환되는 sample변수의 값은 
# 처음부터 반환하는 것을 확인할 수 있다.

 

enumerate의 원리

sample = enumrate(sample)
next(sample) # (0, 7)
next(sample) # (1, 9)
...

enumerate로 감싼 변수를 next()를 통해 호출하면 인덱스와 값이 튜플 형식으로 순서대로 반환되는 것을 확인할 수 있다.

더이상 반환할 next 요소가 없을 경우 StopIteration Exception이 발생한다.

728x90
반응형

'프로그래밍 언어 > Python' 카테고리의 다른 글

Python - FastAPI 프레임워크란?  (0) 2021.12.01
Python - Type Hinting  (0) 2021.12.01
Python - 함수정의  (0) 2021.11.25
Python - 자료형에 대한 정리  (0) 2021.11.25
Python - Dict 자료형이란?  (0) 2021.09.17
Comments