본문 바로가기
IT/파이썬 라이브러리 (Python)

#022 파이썬 라이브러리 : iterator 이터레이터 객체를 이해하자

by DoitSQL 2023. 4. 17.
728x90

python 파이썬 라이브러리 iterator

#022 파이썬 라이브러리 : iterator 이터레이터 객체를 이해하자

iterator 이터레이터 객체를 이해하자

파이썬에서 효율적으로 코드를 작성하기 위해서는 이터레이터(iterator)를 이해하여야 합니다. 번역하면 '반복자'로 번역되는데 그냥 이터레이터로 칭합니다.. 이터레이터(iterator)란 반복가능한 객체 즉, 반복문을 활용해서 데이터를 순회하면서 처리하는 것을 의미합니다.

 

파이썬에서 이터레이터(iterator)는 여러 개의 요소를 가지는 컨테이너(리스트, 튜플, 셋, 사전, 문자열 등)에서 각 요소를 하나씩 꺼내 어떤 처리를 수행하는 간편한 방법을 제공하는 객체입니다.


iterable(반복가능) vs iterator(반복자)

내부 요소(member)를 하나씩 리턴할 수 있는 객체를 보고 iterable 하다고 합니다.

list, tuple, set, dictionary 등과 같이 같이 여러 개의 요소를 갖는 데이터 타입이 해당합니다. 이러한 객체를 처리하기 위해서 for문을 많이 사용합니다.

list = [1,2,3,4,5]

for i in list:
    print(i)

▶ 결과

1
2
3
4
5

for문을 통해 순차적으로 처리할 수 있는 객체를 iterable 하다고 말합니다. 그러나 이터레이터(iterator)라고 하지는 않습니다.

 

데이터를 순차적으로 접근할 수 있다는 것은 같지만 두 객체는 다음과 같은 차이가 있습니다.

  • iterable은 list처럼 데이터를 순회할 수 있는 객체입니다.
  • iterator는 iterable 객체를 순회하는 객체입니다.
  • iterable은 iter() 메서드로 iterator 객체를 생성할 수 있습니다.
  • iterator는 next() 메서드로 iterable의 데이터에 순차적으로 접근할 수 있습니다.
  • iterator 객체는 항상 iterable 객체가 됩니다. 하지만 iterable 객체는 iterator 객체가 될 수 있지만 iterator 객체는 아닙니다.

iterator 객체로 list 순회하는 방법

my_list = ['a', 'b', 'c', 'd']

iterator = iter(my_list)

print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))

▶ 결과

a
b
c
d
traceback (most recent call last):
  file "e:\python_study\test_temp.py", line 10, in <module>
    print(next(iterator))
stopiteration

▶ 설명

  • iter()는 iterable 객체로부터 iterator 객체를 생성하는 메서드입니다.
  • next()는 iterator의 __next__()를 호출하는 메서드입니다. 객체에서 다음 요소를 가져옵니다.

위 코드는 iterable에서 iterator를 생성하고, 그 iterator로 리스트를 순회합니다. next()를 4번 호출하여 4개의 아이템을 모두 순회합니다.

 

next()를 5번째 호출하게 되면 stopiteration 예외가 발생시킵니다.


객체가 iterable인지 확인하는 방법

어떤 객체가 iter()로 iterator 객체를 생성할 수 있으면 iterable 객체입니다. 이것으로 iterable 객체인지 확인할 수 있습니다.

다음은 여러 객체들에 대해서 iterable인지 확인하는 예제입니다.

def iterable(obj):
    try:
        iter(obj)
        return true
    except typeerror:
        return false

items = [34, [4, 5], (4, 5), {'a':4}, 'abcd', 4.5]
for element in items:
    print(element, "is iterable:", iterable(element), type(element))

▶ 결과

34 is iterable: false <class 'int'>
[4, 5] is iterable: true <class 'list'>
(4, 5) is iterable: true <class 'tuple'>
{'a': 4} is iterable: true <class 'dict'>
abcd is iterable: true <class 'str'>
4.5 is iterable: false <class 'float'>

▶ 설명

true로 나온 객체들은 iterable 하여 iterator로 생성 가능한 객체입니다.


이번 시간에 배운 iterator를 이해하시고 이를 효과적으로 사용할 수 있는 itertools 함수를 통해 여러 가지를 할 수 있다는 것을 다음 시간부터 배워봅니다.

 

감사합니다.

 

Do it! SQL을 찾아 주셔서 감사합니다. ♥ 댓글이 큰 힘이 됩니다.

 

728x90

댓글