python data library - itertool ) 모든 경우의 수를 확인하는 법
리스트 또는 문자열에 대해 조합 가능한 모든 방법을 찾기 위해 사용한 적이 있습니다.
# accumulate([1,2,3,4,5]) --> 1 3 6 10 15
# accumulate([1,2,3,4,5], initial=100) --> 100 101 103 106 110 115
# accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
위와 같은 방법으로 모든 값을 더한 값이거나
# combinations('ABCD', 2) --> AB AC AD BC BD CD
# combinations(range(4), 3) --> 012 013 023 123
# combinations_with_replacement('ABC', 2) --> AA AB AC BB BC CC
combinations()또는 combinations_with_replacement() 함수를 이용하여 중복되지 않은 값들을 모두 나열할 수 있습니다. 그 외에 여러 함수들을 통해 효율적으로 도구들을 매핑 가능합니다. 그 외의 다양한 기능들은 아래를 참조해 주세요
효율적인 루핑을 위한
이터레이터를 만드는 함수
이 모듈은 자체적으로 혹은 조합하여 효율적으로 도구의 특정 집합을 표준화시킬 수 있는 기능이 존재합니다. 순수 파이썬에서 간결하고 효율적으로 특수화된 도구를 구성할 수 있도록 하는 《이터레이터 대수(iterator algebra)》를 형성합니다.
예를 들어, SML은 테이블 화 도구를 제공합니다: 시퀀스 f(0), f(1), ...를 생성하는 tabulate(f). map()과 count()를 결합하여 map(f, count())를 형성해서 파이썬에서도 같은 효과를 얻을 수 있습니다.
이러한 도구와 그들의 내장 대응물들은 operator 모듈의 고속 함수와도 잘 작동합니다. 예를 들어, 곱셈 연산자는 두 벡터에 걸쳐 매핑되어 효율적인 내적(dot-product)을 형성할 수 있습니다:
-> sum(map(operator.mul, vector1, vector2)).
무한 루프 가능한 이터레이터
count() | start[step] | count(10) --> 10 11 12 13 14 ... |
cycle() | p | cycle('ABCD') --> A B C D A B C D ... |
repeat() | element[,n] | repeat(10,3) -->101010 |
가장 짧은 입력 시퀀스에서 종료되는 이터레이터
accumulate() |
p [, func] |
accumulate([1,2,3,4,5]) --> 1 3 6 10 15 |
chain() |
p, q, … |
chain('ABC', 'DEF') --> A B C D E F |
chain.from_iterable() |
iterable |
chain.from_iterable(['ABC', 'DEF']) --> A B C D E F |
compress() |
data, selectors |
compress('ABCDEF', [1,0,1,0,1,1]) --> A C E F |
dropwhile() |
pred, seq |
dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1 |
filterfalse() |
pred, seq |
filterfalse(lambda x: x%2, range(10)) --> 0 2 4 6 8 |
groupby() |
iterable [, key] |
|
islice() |
seq, [start,] stop [, step] |
islice('ABCDEFG', 2, None) --> C D E F G |
starmap() |
func, seq |
starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000 |
takewhile() |
pred, seq |
takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4 |
tee() |
it, n |
|
zip_longest() |
p, q, … |
zip_longest('ABCD', 'xy', fillvalue='-') --> Ax By C- D- |
조합형 이터레이터
product() |
p, q, … [repeat=1] |
데카르트 곱(cartesian product), 중첩된 for 루프와 동등합니다 |
permutations() |
p [, r] |
r-길이 튜플들, 모든 가능한 순서, 반복되는 요소 없음 |
combinations() |
p, r |
r-길이 튜플들, 정렬된 순서, 반복되는 요소 없음 |
combinations_with_replacement() |
p, r |
r-길이 튜플들, 정렬된 순서, 반복되는 요소 있음 |
docs.python.org/ko/3/library/itertools.html