프로그래밍/Python 관련 정보

Iterator/Generator의 활용

물박사의 저장공간 2022. 5. 18. 10:27

Iterator: List, Set, Dictionary와 같이 하나하나 처리할 수 있는 객체

Generator: 모든 데이타를 미리 갖고 있지 않은 상태에서 yield에 의해 하나씩만 데이타를 만들어 불러오는 객체

(데이터가 대량이거나 해서 on-demand로 처리하는게 효율적인 경우에 사용)

 

아래 블로그에서 그 차이를 잘 묘사하고 있습니다

http://pythonstudy.xyz/python/article/23-Iterator%EC%99%80-Generator

 

예제로 배우는 파이썬 프로그래밍 - Iterator와 Generator

1. Iterator 리스트, Set, Dictionary와 같은 컬렉션이나 문자열과 같은 문자 Sequence 등은 for 문을 써서 하나씩 데이타를 처리할 수 있는데, 이렇게 하나 하나 처리할 수 있는 컬렉션이나 Sequence 들을 Itera

pythonstudy.xyz

"Generator Expression은 Generator Comprehension으로도 불리우는데, List Comprehension과 외관상 유사하다. List Comprehension은 앞뒤를 [...] 처럼 대괄호로 표현한다면, Generator Expression (...) 처럼 둥근 괄호를 사용한다. 하지만 Generator Expression은 List Comprehension과 달리 실제 리스트 컬렉션 데이타 전체를 리턴하지 않고, 그 표현식만을 갖는 Generator 객체만 리턴한다. 즉 실제 실행은 하지 않고, 표현식만 가지며 위의 yield 방식으로 Lazy Operation을 수행하는 것이다."

 

Iterator/Generator는 iter/next함수와 같이 활용할 수 있습니다. 

 

iter: iteration을 끝낼 값을 지정 후, 해당 값이 나올 때 iteration 종료.

sytax: iter(호출가능한 객체, 특정값)

 

next: Iteration이 진행될 때는 호출된 객체의 값이 나오고 iteration 후에는 default값을 출력

sytax: iter(호출가능한 객체, default값)

 

https://dojang.io/mod/page/view.php?id=2408 

 

파이썬 코딩 도장: 39.4 iter, next 함수 활용하기

이번에는 파이썬 내장 함수 iter, next에 대해 알아보겠습니다. iter는 객체의 __iter__ 메서드를 호출해주고, next는 객체의 __next__ 메서드를 호출해줍니다. 그럼 range(3)에 iter와 next를 사용해보겠습니

dojang.io

 

이번 포스팅의 개념들을 활용하여 리스트에서 최초로 0이 아닌 값을 리턴하는 코드를 짜보면

start_16k = next((i for i, x in enumerate(sales_16k) if x), None)

이런 형태가 될 수 있을 겁니다. sales_16k라는 리스트가 있는데,

(i for i, x in enumerate(sales_16k) if x)

에서 generator를 만들고, next의 문법을 활용해서 최초로 element값이 0이 아닌 인덱스를 찾아내는 것입니다.