성실한 사람이 되자

성실하게 글쓰자

This is spear

Programming/Python

python data library - itertool ) 모든 경우의 수를 확인하는 법

Imaspear 2021. 2. 14. 15:58
728x90

 

 

리스트 또는 문자열에 대해 조합 가능한 모든 방법을 찾기 위해 사용한 적이 있습니다. 

 

# 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

 

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.9.1 문서

 

docs.python.org