Iterable 객체
- 반복 가능한 객체
- 대표적으로 iterable한 타입 - list, dict, set, str, bytes, tuple, range
- iter()메소드에 전달될 때 Iterator를 생성한다.
Iterable한 타입을 확인하는 방법
- collection.Iterable에 속한 instance인지 확인: isinstance 함수는 첫 번째 파라미터, 두 번째 파라미터 클래스의 instance 이면 True를 반환
import collections.abc
# iterable 타입
var_list = [1, 3, 5 ,7]
print(isinstance(var_list, collections.Iterable)) # 출력: True
var_dict = {"a": 1, "b": 1}
print(isinstance(var_dict, collections.Iterable)) # 출력: True
var_set = {1, 3}
print(isinstance(var_set, collections.Iterable)) # 출력: True
var_str = "abc"
print(isinstance(var_str, collections.Iterable)) # 출력: True
var_bytes = b'abcdef'
print(isinstance(var_bytes, collections.Iterable)) # 출력: True
var_tuple = (1, 3, 5, 7)
print(isinstance(var_tuple, collections.Iterable)) # 출력: True
var_range = range(0, 5)
print(isinstance(var_range, collections.Iterable)) # 출력: True
Iterator 객체
- 하나 이상의 항목이 포함되어 있는 자료구조에서 데이터를 차례대로 꺼낼 수 있는 객체
- iterator는 iterable한 객체를 내장 함수 또는 iterable 객체의 메소드로 객체를 생성할 수 있음
Iterator는 __next__() 메서드를 가지며, 반복 가능한 객체를 반복하는 데 사용하는 객체이고, 다음 순서의 item값을 반환한다. 모든 iterator는 iterable이지만, 모든 iterable이 iterator는 아니다.
ex) list 객체자체는 iterable이지만 iterator가 아님
test_list = ['a','b','c','d']
print(test_list) # 출력: ['a', 'b', 'c', 'd']
print(next(test_list)) # error: TypeError: 'list' object is not an iterator
예를 들어 위 코드의 마지막 문장에서 next() 메소드를 이용하면 test_list는 list 이기에 iterator가 아니어서 TypeError를 뱉어낸다.
Iterable 객체를 iterator 객체로 변환
모든 Iterable한 객체에 파이썬 내장 함수 iter()를 사용해 iterator 객체로 만들 수 있다.
test_list = ['a','b','c','d']
test_iter = iter(test_list)
print(test_iter) # 출력: <list_iterator object at 0x117c3d640>
print(next(test_iter)) # 출력: a
print(next(test_iter)) # 출력: b
print(next(test_iter)) # 출력: c
print(next(test_iter)) # 출력: d
print(next(text_iter)) # 에러: StopIteration => 5번째 iter는 없기 때문
next() 내장함수는 인자가 되는 Iterator의 다음 인자를 반환하고 위치를 다음으로 옮기는 기능을 한다.
iterable이었던 test_list를 iter()메소드를 사용해 변환하여 담은 test_iter 객체는 이제 itertor이기 때문에 next() 메소드를 이용했을 때 오류 없이 출력이 된다.
'ETC' 카테고리의 다른 글
mac M1에서 안드로이드 애뮬레이터 사용하기 (0) | 2021.11.06 |
---|---|
[ios]애뮬레이터 키보드 자판 보이기 (0) | 2021.11.06 |
[python] 파이썬에서 언더스코어('_') 가 가지는 다양한 의미 (0) | 2021.11.03 |
[python] turtle, 세마리의 거북이 충돌없이 이동하기 (0) | 2021.10.24 |
영화추천 알고리즘(Movie-Recommender) 파이썬으로 구현해보기 (0) | 2021.10.24 |
추천 알고리즘(Recommendation Algorithm)이란? (0) | 2021.10.24 |
댓글