Iterator와 Iterable은 List 같은 자료구조에 저장된 데이터를 순차적으로 접근하는 객체입니다.
하지만 다음과 같은 차이점이 있습니다.
- Iterable은 List처럼 데이터를 순회할 수 있는 객체입니다.
- Iterator는 Iterable 객체를 순회하는 객체입니다.
- Iterable은
iter()
메소들로 Iterator 객체를 생성할 수 있습니다. - Iterator는
__next__()
메소드로 Iterable의 데이터에 순차적으로 접근할 수 있습니다. - Iterator 객체는 항상 Iterable 객체가 됩니다. 하지만 Iterable 객체는 Iterator 객체가 될 수 있지만 아닐 수도 있습니다.
예제를 통해 자세히 알아보겠습니다.
1. Iterable와 반복문으로 리스트 순회하는 방법
List는 Iterable입니다.
다음 코드는 반복문으로 List를 모든 요소를 순회하는 예제입니다.
for loop 내부적으로 iter()
메소드를 호출하여 Iterator 객체를 얻고, Iterator의 __next__()
를 호출하여 모든 요소를 탐색합니다.
my_list = ['a', 'b', 'c', 'd']
for item in my_list:
print(item)
Output:
a
b
c
d
1.1 Example
문자열도 Iterable입니다. 문자열을 순회할 때, 문자 1개씩 접근합니다.
string = "Hello!"
for ch in string:
print(ch)
Output:
H
e
l
l
o
!
2. Iterator 객체로 List 순회하는 방법
iter()
는 Iterable 객체로부터 iterator 객체를 생성하는 메소드입니다.next()
는 Iterator의__next__()
를 호출하는 built-in 메소드입니다.
아래 코드는 Iterable에서 Iterator를 생성하고, 그 Iterator로 리스트를 순회합니다. next()
를 4번 호출하여 4개의 아이템을 모두 순회합니다.
my_list = ['a', 'b', 'c', 'd']
iterator = iter(my_list)
print(next(iterator))
print(next(iterator))
print(next(iterator))
print(next(iterator))
Output:
a
b
c
d
2.1 StopIteration 예외
위의 예제에서 next()
를 4번 호출하면 모든 요소를 탐색하게 됩니다. 만약 next()
를 5번째 호출하게 되면 StopIteration
예외가 발생시킵니다.
Traceback (most recent call last):
File "/home/js/IdeaProjects/python-ex/iterator.py", line 14, in <module>
print(next(iterator))
StopIteration
3. 객체가 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}, "dfsdf", 4.5]
for element in items:
print(element, "is iterable:", iterable(element))
Output:
34 is iterable: False
[4, 5] is iterable: True
(4, 5) is iterable: True
{'a': 4} is iterable: True
dfsdf is iterable: True
4.5 is iterable: False
References
Loading script...
Related Posts
- Python - Yaml 파일 파싱하는 방법
- Python - 파일 내용 삭제
- Python - for문에서 리스트 순회 중 요소 값 제거
- Python - 두 리스트에서 공통 요소 값 찾기
- Python - 문자열 앞(뒤)에 0으로 채우기
- Python - 공백으로 문자열 분리
- Python - 중첩 리스트 평탄화(1차원 리스트 변환)
- Python - 16진수 문자열을 Int로 변환
- Python - 두 날짜, 시간 비교
- Python f-string으로 변수 이름, 값 쉽게 출력 (변수명 = )
- Python - nonlocal과 global 사용 방법
- Python 바다코끼리 연산자 := 알아보기
- Python - pip와 requirements.txt로 패키지 관리
- Python - 딕셔너리 보기 좋게 출력 (pprint)
- Python - Requests 사용 방법 (GET/POST/PUT/PATCH/DELETE)
- Python - 온라인 컴파일러 사이트 추천
- Python - os.walk()를 사용하여 디렉토리, 파일 탐색
- Python - 문자열 비교 방법
- Python - Text 파일 읽고 쓰는 방법 (read, write, append)
- Python - 리스트에서 첫번째, 마지막 요소 가져오는 방법
- Python - 두개의 리스트 하나로 합치기
- Python - 리스트의 마지막 요소 제거
- Python - 리스트의 첫번째 요소 제거
- Python 소수점 버림, 4가지 방법
- Python 코드 안에서 버전 확인 방법
- Python 소수점 반올림, round() 예제
- Python - 리스트 평균 구하기, 3가지 방법
- Python - bytes를 String으로 변환하는 방법
- Python - String을 bytes로 변환하는 방법
- Python 버전 확인 방법 (터미널, cmd 명령어)
- Python - 람다(Lambda) 함수 사용 방법
- Python - dict 정렬 (Key, Value로 sorting)
- Python - range() 사용 방법 및 예제
- Python - 리스트를 문자열로 변환
- Python - 문자를 숫자로 변환 (String to Integer, Float)