아래 내용은 공부한 것을 정리하므로 틀린 내용이 포함되어 있을 수 있습니다.
1. itertools
- itertools 모듈에는 반복 가능한 데이터 스트림을 처리하는 데 유용한 많은 함수와 제네레이터가 포함되어 있습니다
-
REPL을 통해 확인합니다.
- 예제를 위해 소수(1과 자기자신만 나눌 수 있는 수)를 구하는 함수를 작성합니다.
>>> def is_prime(x): ... if x > 1: ... for i in range(2, x): ... if x % i == 0: ... return False ... else: ... return False ... return True ... >>> is_prime(5) True >>> is_prime(8) False
- itertools 모듈의
count()
와islice()
함수를 사용합니다. - count :
count(시작, [step])
의 함수로 시작 숫자부터 step만큼(없으면 1) 씩 무한히 증가하 제네레이터입니다. - islice :
islice(iterable객체, [시작], 정지[,step])
의 함수로, iterable한 객체를 특정 범위로 슬라이싱하고 iterator로 반환됩니다. -
다음은 0 부터 999까지의 수 중에 소수인 수를 반환하는 iterator를 만듭니다.
>>> from itertools import islice, count >>> thousand_primes = islice((x for x in count() if is_prime(x)),1000) >>> next(thousand_primes) 2 >>> next(thousand_primes) 3 >>> next(thousand_primes) 5
- chain :
chain(*iterable)
은 iterable한 객체들을 인수로 받아 하나의 iterator로 반환>>> from itertools import chain >>> country = ['대한민국','스웨덴', '미국'] >>> capital = ['서울','스톡홀름','워싱턴'] >>> c = chain(country, capital) >>> next(c) '대한민국' >>> next(c) '스웨덴' >>> next(c) '미국' >>> next(c) '서울' >>> next(c) '스톡홀름' >>> next(c) '워싱턴'
2. iterable에 유용한 내장함수
- all :
all(iterable)
은 iterable한 객체를 인수로 받으며, 인수의 원소가 모두 참이면 True, 거짓이 하나라도 있 으면 False를 리턴>>> all([1, 2, 3]) True >>> all([0, 1, 2, 3]) False
- any :
any(iterable)
은 iterable한 객체를 인수로 받으며, 인수의 원소 중 하나라도 참이면 True, 모두 거짓일때만 False를 리턴, all의 반대>>> any([False, 3]) True >>> any([False, 0, []]) False
- zip :
zip(*iterable)
은 iterable한 객체를 인수로 받으며 동일한 개수로 이루어진 자료형을 묶어서 iterator로 반환.>>> a = zip([1,2,3], (4,5,6)) >>> next(a) (1, 4) >>> next(a) (2, 5) >>> next(a) (3, 6)
- zip은 두개의 iterable객체를 묶어 for문을 한꺼번에 반복시킬때 유용합니다.
>>> country = ['대한민국','스웨덴', '미국'] >>> capital = ['서울','스톡홀름','워싱턴'] >>> for coun, cap in zip(country, capital): ... print('국가명 : {}, 수도:{}'.format(coun,cap)) ... 국가명 : 대한민국, 수도:서울 국가명 : 스웨덴, 수도:스톡홀름 국가명 : 미국, 수도:워싱턴