Iterable
정의
Iterable : 반복 가능 객체
파이썬에서 list , tuple , str 과 같은 객체들
내부에 데이터를 담고 있고, 그 데이터를 하나씩 꺼내 반환할 수 있는 구조를 가진 객체
핵심
__iter__() 메서드를 가지고 있어, 이를 호출하면 Iterator 를 반환한다.
내부 데이터를 직접 꺼내는 게 아니라, Iterator를 통해 꺼낼 수 있는 “재료”의 역할을 한다.
종류
종류
설명
list
순서가 있는 가변 시퀀스
dict
키(Key)와 값(Value)의 쌍으로 이루어진 매핑 객체
set
중복을 허용하지 않는 집합 객체
str
문자들의 시퀀스
bytes
바이트 단위의 시퀀스
tuple
순서가 있는 불변 시퀀스
range
연속된 숫자를 생성하는 객체
Iterator
정의
Iterator : 반복자
데이터를 차례대로 꺼낼 수 있는 객체
핵심
대상 객체 : 반복시킬 Iterable의 위치(참조값)
Index Pointer : 다음번에 호출할 요소의 위치(참조값)
자신이 어디까지 데이터를 읽었는지 상태(State)를 기억한다.
__iter__() : Iterator 자기 자신을 반환한다. (Iterator도 Iterable이 되기 위함)
__next__() : 다음 요소를 하나씩 반환한다. 더 이상 반ㅂ환할 요소가 없으면 StopIteration 예외를 발생시킨다.
작동 방식
next() 가 호출될 때마다 내부에서 아래와 같이 동작한다.
1
2
3
1. 현재 인덱스가 리스트의 길이보다 작은지 확인한다 .
2. 작다면 , 리스트의 현재 인덱스에 있는 값을 반환하고 , 현재 인덱스를 1 증가시킨다 .
3. 만약 인덱스가 범위를 벗어난다면 "StopIteration" 을 발생시킨다 .
실습
Iterable 과 Iterator 감 잡기
1
2
3
4
5
6
7
8
iterable = [ 1 , 2 , 3 , 4 ] # iterable : Iterable
it = iter ( iterable ) # it : Iterator
print ( next ( it ))
print ( next ( it ))
print ( next ( it ))
print ( next ( it ))
print ( next ( it ))
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
---------------------------------------------------------------------------
StopIteration Traceback ( most recent call last)
Cell In[120], line 7
5 print( next( it))
6 print( next( it))
---- > 7 print( next( it))
StopIteration:
for 반복문과 iter
1
2
for item in [ 1 , 2 , 3 ]:
print ( item )
(1) Iterator 획득 : 주어진 iterable 내부의 __iter__() 메서드를 호출해 Iterator를 획득한다.
1
iterator = iter ([ 1 , 2 , 3 ])
(2) 반복 호출 : 획득한 Iterator에 대해 next() 메서드를 반복적으로 호출해 값을 하나씩 가져온다.
(3) 종료 처리 : 더 이상 내보낼 값이 없으면 StopIteration 예외를 발생시킨다. for문은 이 예외를 감지함녀 루프를 안전하게 종료시킨다.
1
2
3
4
5
6
7
8
iterator = iter ([ 1 , 2 , 3 ])
while True :
try :
item = next ( iterator )
print ( x )
except StopIteration :
break
Iterator 만들어보기
인입된 Iterable 객체의 “반대 순서”로 데이터의 순서를 저장하는 Iterator를 만들어보았다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class ReverseIterator :
def __init__ ( self , data ):
self . data = data
self . index = 0
def __iter__ ( self ):
self . data = self . data [:: - 1 ] # __iter__()메서드가 호출되면 인입된 데이터를 거꾸로 저장
return self
def __next__ ( self ):
if self . index >= len ( self . data ):
raise StopIteration
self . index += 1
return self . data [ self . index - 1 ]
1
2
3
ri = ReverseIterator ([ 1 , 2 , 3 , 4 ])
for i in ri :
print ( i )
Reference
Python docs - 이터레이터 객체
Wikidocs - 38. Iterable 과 Iterator
Tags:
dictionary ,
generator ,
iterable ,
iterator ,
list ,
python ,
tuple ,
가능 ,
객체 ,
딕셔너리 ,
리스트 ,
반복 ,
반복자 ,
제너레이터 ,
튜플 ,
파이썬
Categories:
Python
Updated: 2026-02-d
Comments