[Python] Iterator

문성호·2020년 8월 24일

Iterator란?

  • 이터레이터는 값을 순차적으로 꺼내올 수 있는 객체 입니다.

  • 만약 연속된 숫자를 미리 만들면 숫자가 적을 때는 상관없지만 숫자가 아주 많을 때는 메모리를 많이 사용하게 되므로 성능에 불리.

  • 그래서 파이썬에서는 이터레이터만 생성하고 값이 필요한 시점이 되었을 때 값을 만드는 방식을 사용. 즉, 데이터 생성을 뒤로 미루는 것인데 이런 방식을 지연 평가(lazy evaluation)라고 함.

Iterator 적용가능한지(Iterable) 알아보기

  • L이라는 리스트가 Iterable한지 알아보려면 dir(L) 함수로 알아볼 수 있다.
    ['add', 'class', 'contains', 'delattr', 'delitem', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'gt', 'hash', 'iadd', 'imul', 'init', 'init_subclass', 'iter', 'le', 'len', 'lt', 'mul', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'reversed', 'rmul', 'setattr', 'setitem', 'sizeof', 'str', 'subclasshook', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

  • iter가 존재하므로 iterable하기 때문에, iterator 객체라고 할 수 있다.

Iterator 사용법

  • 일반적으로 List의 요소에 순차적으로 접근하려면 아래와 같이 한다.
	L = [1, 2, 3]
	for x in L:
	  print(x ** 2, end=' ')
		
  • iterator를 사용하려면 iterator 객체를 통해 사용해야 한다.
    위의 리스트 L을 iterator 객체로 등록하고 사용한다.

    L_iterator = L.__iter__()
    print(L.iterator__next__()) 				# 1
    print(L.iterator__next__()) 				# 2
    print(L.iterator__next__()) 				# 3
    
  • 파이썬에서는 좀 더 직관적으로 이터레이터를 사용할 수 있게 iter(), next()함수를 제공한다.

   I = iter(L)
   while True:
       try:
           X = next(I)
       except StopIteration:
          break
   print(X)

Dictionary도 Iterator 적용해보기

  • 아래와 같이 딕셔너리를 for문으로 접근한 코드를 Iterator로 바꿔보자.
	D = {'a':1, 'b':2, 'c':3}
	for key in D.keys():
 	   print(key)

Solution

while True:
  try :
    N = next(DI)
  except StopIteration:
    break;
  print(N)
  
profile
오늘을 모아 내일을

0개의 댓글