-
itertools파이썬 Study/라이브러리 2021. 3. 17. 00:37
참조:
https://itholic.github.io/python-combination-permutation/
https://hamait.tistory.com/803
■ itertools
1) 정의 :
- 순열 / 조합 등의 반복자를 함수로 구현하여 손쉽게 객체로 받을 수 있음
- 복잡도가 o(n^2)이므로 정말 필요한게 아니면 쓰기 어려움(코테 등에서)
- 탐색양이 많지 않은 경우 활용해보도록 하자
2) 예시 :
import itertools chars = ['A', 'B', 'C'] p = itertools.permutations(chars, 2) # 순열 c = itertools.combinations(chars, 2) # 조합 print(list(p)) >>> [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')] print(list(c)) >>> [('A', 'B'), ('A', 'C'), ('B', 'C')]
> 중복이 포함된 list에서 검색할 때는 set( ) 활용
(a) product
- 정의 : 순열, 중복 선택 가능
itertools.product( <iterable to work with>, repeat = n )
import itertools itertools.product('ABCD', repeat=2) # 결과: AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
(b) permutations
- 정의 : 순열, 중복 아님
itertools.permutations( <iterable to work with>, n )
import itertools itertools.combinations('ABCD', 2) # 결과: AB AC AD BC BD CD
(c) combinations_with_replacement
- 정의 : 조합, 중복 선택 가능
itertools.combinations_with_replacement( <iterable to work with>, n )
import itertools itertools.combinations_with_replacement('ABCD', 2) # 결과: AA AB AC AD BB BC BD CC CD DD
(d) combinations
- 정의 : 조합, 중복 아님
itertools.combinations( <iterable to work with>, n )
import itertools itertools.combinations('ABCD', 2) # 결과: AB AC AD BC BD CD
■ 다른 유용한 메써드
1) islice
(a) 정의 :
islice object 반환, list의 index와 매우 유사
itertools.islice( <iterator>, [start], stop=None, [step] )
(b) 예시 :
tmp = [(1,7,'hj_1'), (2,8,'hj_2'), (3,6,'hj_3'), (-1,1,'hj_4')] tmp_tmp = itertools.islice(tmp, 2, None) tmp_tmp_2 = itertools.islice(tmp, 1, None) tmp_tmp_3 = itertools.islice(tmp, 1, 2) # islice object로 반환되므로, list 형변환 해줌 print('tmp_tmp : ', list(tmp_tmp)) print('tmp_tmp_2 : ', list(tmp_tmp_2)) print('tmp_tmp_3 : ', list(tmp_tmp_3)) >>> tmp_tmp : [(3, 6, 'hj_3'), (-1, 1, 'hj_4')] >>> tmp_tmp_2 : [(2, 8, 'hj_2'), (3, 6, 'hj_3'), (-1, 1, 'hj_4')] >>> tmp_tmp_3 : [(2, 8, 'hj_2')]
2) chain
(a) 정의 :
chain object 반환, 형변환 요구
itertools.chain( <iterator 1>, <iterator 2>, ... )
(b) 예시 :
letters = ['a', 'b', 'c', 'd', 'e', 'f'] booleans = [1, 0, 1, 0, 0, 1] decimals = [0.1, 0.7, 0.4, 0.4, 0.5] print list(itertools.chain(letters, booleans, decimals)) >>> ['a', 'b', 'c', 'd', 'e', 'f', 1, 0, 1, 0, 0, 1, 0.1, 0.7, 0.4, 0.4, 0.5]
3) count
(a) 정의 :
필요한 만큼, 특정 값을 시작으로 반복
함께 계산되는 iterator 에 따라 반복 횟수가 자동으로 한정 됨
itertools.count( start, step=1)
def count(start=0, step=1): # count(10) --> 10 11 12 13 14 ... # count(2.5, 0.5) -> 2.5 3.0 3.5 ... n = start while True: yield n n += step
(b) 예시 :
# izip : 더 빠른 zip 내장함수 from itertools import count , izip for number, letter in izip(count(0, 10), ['a', 'b', 'c', 'd', 'e']): print '{0}: {1}'.format(number, letter) >>> 0: a 10: b 20: c 30: d 40: e
4) cycle
(a) 정의 :
iterator 에서 요소를 반복적으로 생성
함께 계산되는 iterator 에 따라 반복 횟수가 자동으로 한정 됨
itertools.cycle( <iterable> )
def cycle(iterable): # cycle('ABCD') --> A B C D A B C D A B C D ... saved = [] for element in iterable: yield element saved.append(element) while saved: for element in saved: yield element
(b) 예시 :
from itertools import cycle , izip for number, letter in izip(cycle(range(2)), ['a', 'b', 'c', 'd', 'e']): print '{0}: {1}'.format(number, letter) # 0: a # 1: b # 0: c # 1: d # 0: e
반응형'파이썬 Study > 라이브러리' 카테고리의 다른 글
bisect - binary search (0) 2021.03.19 collections - counter (0) 2021.03.17 map (0) 2021.03.17 set (0) 2021.03.15 filter (0) 2021.03.14