[Python] iter(), next(), enumerate()

2022. 2. 3. 22:17Languages/Python

 

 

 

iterable

 

  • 반복 가능한 타입의 객체를 의미한다.
  • List, Tuple, Dictionary, Set, String, Bytes, Range 등의 순회가 가능하다.
  • Iterable 객체를 판별하기 위해선, collections.Iterable에 속한 객체(Instance)인지 확인하면 된다.
    • isinstance() 함수를 통해 확인이 가능하다.
import collections

list = [1, 3, 5, 7, 9]
print(isinstance(list, collections.Iterable))   # True


A = 300   # int
print(isinstace(A, collections.Iterable))       # False

 

iterable한 타입은 단순히 for 문으로도 순회가 가능하다. 

list = [1, 3, 5, 7, 9]

for i in list:
	print(i)       # 1 3 5 7 9

 

 

 

iter(), next()

 

  • iter() 함수는 객체의 iterator를 리턴해준다.
  • iter() 함수는 반복을 끝낼 값(sentinel)을 지정할 수 있다.
  • next() 함수는 iterator에서 값을 차례대로 가져온다.
    • 기본값을 지정해놓지 않으면, iterator의 값을 다 가져온 후에 호출 시 "StopIteration"을 발생시킨다.
list = [1, 2, 3]
it = iter(list)

for i in range(len(list) + 1):  # 마지막 반복문에서 StopIteration 발생
    print(next(it))

 

 

iter() 함수에 호출 가능한 객체(callable)반복을 끝낼 값(sentinel)을 넣어서 별다른 조건문(if)없이 반복을 중지할 수 있다.

import random

for i in iter(lambda : random.randint(0, 10), 5):  # 숫자 5가 나올 시 중지 
    print(i, end = ' ')

 

 

 

next() 함수에 기본값을 지정해놓으면, 반복이 끝나더라도 StopIteration이 발생하지 않고 기본값을 리턴한다.

list = [1, 2, 3]
it = iter(list)

for i in range(len(list) + 1):
    print(next(it, 100))

 

StopIteration이 발생하지 않고 기본값이 출력

 

 

enumerate

 

  • 몇 번째 반복문인지 확인할 때 사용
  • 튜플(Tuple) 형태로 (인덱스 번호, 원소)를 리턴한다.
Months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', \
          'August', 'September', 'October', ' November', 'December']

i = 0
for item in enumerate(Months):
    print("{0}".format(item), end = ' ')
    i += 1
    if i % 4 == 0:
        print()
print()

 

 

 

enumerate( ... , 1)처럼 두 번째 매개변수를 통해 시작 인덱스 번호를 지정할 수 있다. 

for item in enumerate(Months, 1):  # 시작 인덱스 번호가 1부터 시작
	...

 

 

 

튜플(Tuple)을 리턴한다는 특성을 이용하여, 다음과 같이 활용할 수도 있다.

for index, value in enumerate(Months):
    print("index : {}, value : {}".format(index, value))

 

 

참고

728x90
반응형