Itertools : 효율적인 반복을 위한 모듈
무한 반복자
Iterator | Arguments | Results | Example |
count() | start, [step] | start, start+step, start+2*setp, … | count(10) -> 10 11 12 13 14 ... |
cycle() | p | p0, p1, …plast, p0, p1, … | cycle('ABCD') -> A B C D A B C D ... |
repeat() | elem [,n] | elem, elem, elem, … 무한 반복, 혹은 최대 n번 |
repeat(10, 3) -> 10 10 10 |
가장 짧은 입력 시퀀스에서 종료되는 반복자
Iterator | Arguments | Results | Example |
accumulate() | p [,func] | p0, p0+p1, p0+p1+p2, … | accumulate([1,2,3,4,5]) -> 1 3 6 10 15 |
chain() | p, q, … | p0, p1, … plast, p0, p1, … | chain('ABC', 'DEF') -> A B C D E F |
chain.from_iterable() | iterable | p0, p1, … plast, p0, p1, … | chain.from_iterable(['ABC','DEF']) -> A B C D E F |
compress() | data, seletors | (d[0] if s[0]), (d[1] if s[1]), … | compress('ABCDEF', [1,0,1,0,1,1]) -> A C E F |
dropwhile() | pred, seq | pred가 실패할때 시작되는 seq[n], seq[n+1] | dropwhile(lambda x: x<5, [1,4,6,4,1]) -> 6 4 1 |
filterfalse() | pred, seq | pred(elem)가 false인 seq의 element | filterfalse(lambda x: x%2, range(10)) -> 0 2 4 6 8 |
groupby() | iterable[,key] | key(v)의 값으로 그룹화된 하위 반복자 | |
islice() | seq, [start,] stop [,step] | seq의 요소 [start:stop:step] | islice('ABCDEFG', 2, None) -> C D E F G |
starmap() | func, seq | func(seq[0]), func(seq[1]),… | starmap(pow, [(2,5), (3,2), (10,3)]) -> 32 9 1000 |
takewhile() | pred, seq | seq[0], seq[1], pred가 실패할때까지 | takewhile(lambda x: x<5, [1,4,6,4,1]) -> 1 4 |
tee() | it, n | it1, it2, … 하나의 반복자를 n으로 나눔 | |
zip_longest() | p, q, … | (p[0], q[0]), (p[1], q[1]), … | zip_longest('ABCD', 'xy', fillvalue='-') -> Ax By C- D- |
조합 반복자
Iterator | Arguments | Results | Example |
product() | p, q, … [repeat=1] |
중첩된 for 루프와 동등한 cartesian product(데카르트 곱) | product('ABCD', repeat=2) -> AA AB AC AD BA BB BC .... DA DB DC DD |
permutations() | p[, r] | r-길이 튜플들, 모든 가능한 순서, 반복되는 요소 없음 | permutations('ABCD', 2) -> AB AC AD BA BC BD CA CB CD DA DB DC |
combinations() | p, r | r-길이 튜플들, 정렬된 순서, 반복되는 요소 없음 | combinations('ABCD', 2) -> AB AC AD BC BD CD |
combinations_with_replacement() | p, r | r-길이 튜플들, 정렬된 순서, 반복되는 요소 있음 | combinations_with_replacement('ABCD', 2) -> AA AB AC AD BB BC BD CC CD DD |
예 )
product('ABCD', repeat=2) |
AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD |
permutations('ABCD', 2) |
AB AC AD BA BC BD CA CB CD DA DB DC |
combinations('ABCD', 2) |
AB AC AD BC BD CD |
combinations_with_replacement('ABCD', 2) |
AA AB AC AD BB BC BD CC CD DD |
순열 permutation
서로 다른 n개 중 r개를 골라 순서를 정해 나열하는 가짓수 (nPr로 표시)
ex) [A, B, C]의 리스트에서 2개의 원소를 골라 순서를 정해 나열
-> [(A, B), (A, C), (B, A), (B, C), (C, A), (C, B)]
* 즉, 순열에서는 (A, B)와 (B, A)는 다른 것이다.
permutations(반복 가능한 객체, r)
import itertools
arr = ['A', 'B', 'C']
nPr = itertools.permutations(arr, 2)
print(list(nPr))
결과 : [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
조합 combination
서로 다른 n개 중에서 r개(n≥r)를 골라 조를 만들어 나열하는 가짓수 (nCr로 표시)
순서 고려 X
ex) [A, B, C]의 리스트에서 2개의 원소를 골라 나열
-> [(A, B), (A, C), (B, C)] 가 나오게 된다.
* 즉, 조합은 (A, B)와 (B, A)는 같은 것으로 취급한다.
combinations(반복 가능한 객체, r)
import itertools
arr = ['A', 'B', 'C']
nCr = itertools.combinations(arr, 2)
print(list(nCr))
결과 : [('A', 'B'), ('A', 'C'), ('B', 'C')]
중복 순열 product
서로 다른 n개 중 중복을 허용해 r개를 골라 순서를 정해 나열하는 가짓수 (n∏r로 표시)
product(반복 가능한 객체, repeat=1)
import itertools
for i in product([1,2,3], repeat=2):
print(i, end=" ")
결과 : (1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
중복 조합 combinations_with_replacement
서로 다른 n개 중에서 중복을 허용해 r개(n≥r)를 골라 조를 만들어 나열하는 가짓수 (nHr로 표시)
combinations_with_replacement(반복 가능한 객체, r)
import intertools
for cwr in combinations_with_replacement([1,2,3,4], 2):
print(cwr, end=" ")
결과 : (1, 1) (1, 2) (1, 3) (1, 4) (2, 2) (2, 3) (2, 4) (3, 3) (3, 4) (4, 4)
'Programming > Python' 카테고리의 다른 글
[Algorithm] Python : DFS와 BFS (0) | 2020.11.03 |
---|
댓글