🗂️

4.7.5. 이터레이터, 순회 가능한 객체

 

1. 리스트에서 출력하기

이번 챕터에서는 순회 가능하다는 것이 어떤 의미인지 알아보도록 하겠습니다.

1.1 iter( )

입력
l = [1, 2, 3, 4, 5] i = iter(l) i
 
출력
list_iterator at 0x214c76c0b3

1.2 next( )

위에 이어서 아래와 같이 서술하면 i의 다음값을 출력할 수 있어요. 이처럼 다음 값이 있는 것을 이터레이터, 순회 가능한 객체라 합니다. 하지만 순회 가능하다 해서 순서가 있는 것은 아니라는 점을 기억해두세요. 예를 들어 딕셔너리요.
입력
l = [1, 2, 3, 4, 5] i = iter(l) print(i.__next__()) print(i.__next__()) print(i.__next__())
 
출력
1 2 3
 
range도 동일하게 작동하는지 보도록 하겠습니다.
입력
r = range(2, 11, 2) j = iter(r) print(j.__next__()) print(j.__next__()) print(j.__next__())
 
출력
2 4 6
 
index가 있는 자료형에서는 __getitem__으로 값을 선택할 수 있습니다.
입력
l l[1] l[1:3] l.__getitem__(3) #3이 index값입니다.
 
출력
[1, 2, 3, 4, 5] [2] [2, 3] 4
 
즉, l[ ]로 출력하는 값은 l.__getitem__( )으로 출력하는 값과 같습니다.
입력
#a + a -> __add__와 매칭이 되었던 것처럼 #a[3] -> __getitem__(3)과 매칭이 됩니다. l.__getitem__(3) l.__getitem__(slice(1, 3))
 
출력
4 [2, 3]
 

1.3 slice( )

__getitem__을 이용하여 아래와 같이 출력할 수도 있습니다.
입력
l.__getitem__(slice(1, 3)) l[slice(1, 3)]
 
출력
[2, 3]
 

2. set에서 출력하기

이번에는 순서가 없는 set을 출력해보도록 하겠습니다.
입력
s = {1, 2, 3} i = iter(s) print(i.__next__()) print(i.__next__()) print(i.__next__())
 
출력
1 2 3
 
__getitem__도 작동할까요? 아래 보시는 것처럼 순서가 없기 때문에 애러가 발생합니다. 그러므로 slice( )도 실행되지 않습니다.
입력
s.__getitem___(1)
 
출력
notion imagenotion image

3. 딕셔너리에서 출력하기

마찬가지로 딕셔너리에서도 출력이 되는지 확인해보겠습니다.
입력
d = {'one':'하나', 'two': '둘'} i = iter(d) print(i.__next__()) print(i.__next__())
 
출력
one two
 
입력
d.__getitem___(1)
 
출력
notion imagenotion image
에러가 발생하지만 set에서 발생한 에러와는 조금 다릅니다. set에서는 __getitem___이 없다는 에러가 발생했지만 딕셔너리 에서는 키의 값에서 에러가 발생했습니다. 그러므로 키의 값에 다른 값을 입력할 수 있습니다.
 
입력
d.__getitem__('one')
 
출력
'하나'
list에서는index의 값이 들어가야 하고 딕셔너리에서는 키의 값이 들어가야 출력이됩니다.