Itertools는 조합(Combination) 혹은 순열(Permutation)에 관련된 라이브러리
함수의 종류는 크게 3개로 구분됨
Infinite iterators(무한 이터레이터)
# Func basic example
count(start, [step]) # count(10, 2) -> 10 12 14 16 18 ... Infinite
cycle(p) # cycle('ABCDE' -> A B C D E A B C D E A ... infinite
repeat(element, [repeat]) # repeat(10, 3) -> 10 10 10
# repeat 미입력시 Infinite Repeat
Iterators terminating on the shortest input sequence
# Func basic example
accumulate(p, [func]) # accumulate([1,2,3,4,5]) -> 1 3 6 10 15
batched(p, n) # batched('ABCDEFG', n = 3) -> ABC DEG F
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,0,1,1]) -> A C E F
dropwhile(predicate, seq) # dropwhile(lambda x: x<5, [1,4,6,3,8]) -> 6 3 8
filterfalse(predicate, seq) # filterfalse(lambda x: x<5, [1,4,6,3,8]) -> 6 3 8
group by(iterable, [key]) # groupby()
islice(seq, [start], stop, [step]) # islice('ABCDEFG', 2, None) -> C D E F G
pairwise(iterable) # pairwise('ABCDEFG') -> AB BC CD DE EF FG
starmap(func, seq) # starmap(pow, [(2,5), (3,2),(10,3)]) -> 32 9 1000
takewhile(predicate, seq) # takewhile(lambda x: x<5, [1,4,6,3,8]) -> 1 4
tee(it, n) # tee()
zip_longest(p,q,..., [fillvalue]) # zip_longest('ABCD','xy',fillvalue = '-')
# -> Ax By C- D-
Combinatoric Iterators(조합 이터레이터)
# Func basic example
product(p, q, ..., [repeat]) # product('ABCD',repeat=2) -> AA AB AC AD BA BB BC BD
# CA CB CC CD DA DB DC DD
permutations(p, [r]) # permutations('ABCD', 2) -> AB AC AD BA BC BD CA CB
# CD DA DB DC
combinations(p, r) # combinations('ABCD', 2) -> AB AC AD BC BD CD
#
combinations_with_replacement(p, r) # combinations_with_replacement('ABCD', 2) -> AA AB AC
# -> AD BB BC BD CC CD DD
Example Detail
count (start, [step])
from itertools import *
#infinite Iterator 생성 / 10부터 2단위로 출력
c = count(10, 2)
# 다섯번째 값까지 출력
for i in range(5):
print(next(c)) #next함수로 출력 가능
---------------------------------------------
#결과
10
12
14
16
18
accumulate(p, [func])
from itertools import *
def mul(x, y): return x * y
acc = accumulate([1,2,3,4,5], mul) #func 미지정시 add로 누적연산
acc_li = list(acc) # -> [1,2,6,24,120] 저장
for r in acc:
print(r)
---------------------------------------------
#결과
1
2
6
24
120
dropwhile(predicate, seq) → False를 반환
from itertools import *
data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
result = dropwhile(lambda x: x%2 != 0, data)
result = list(result) #-> [2,4,6,8,10] 저장
for r in result:
print(r)
---------------------------------------------
#결과
2
4
6
8
10
takewhile(predicate, seq) → True를 반환
from itertools import *
data = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]
result = takewhile(lambda x: x%2 != 0, data)
result = list(result) #-> [1,3,5,7,9] 저장
for r in result:
print(r)
---------------------------------------------
#결과
1
3
5
7
9
product(p, q, ..., [repeat])
from itertools import *
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
result1 = product(numbers, letters)
result2 = product(numbers, repeat = 3)
# 모든 조합 출력
for r in result1:
print(r)
# repeat2은 리스트로 출력
print(list(result2))
---------------------------------------------
#결과
(1, 'a')
(1, 'b')
(1, 'c')
(2, 'a')
(2, 'b')
(2, 'c')
(3, 'a')
(3, 'b')
(3, 'c')
[(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1), (1, 3, 2), (1, 3, 3), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)]
permutations(p, [r])
from itertools import *
Letters = ['ABCD', 'DEFG']
res_1 = permutations(Letters, 2)
res_2 = permutations(Letters[0],3)
res_3 = []
for i in range(1, len(Letters[1])+1):
res_3.append(list(permutations(Letters[1],i)))
print(list(res_1))
print(list(res_2))
print(list(res_3))
---------------------------------------------
#결과
# res_1
[('ABCD', 'DEFG'), ('DEFG', 'ABCD')]
# res_2
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'B'), ('A', 'C', 'D'), ('A', 'D', 'B'), ('A', 'D', 'C'), ('B', 'A', 'C'), ('B', 'A', 'D'), ('B', 'C', 'A'), ('B', 'C', 'D'), ('B', 'D', 'A'), ('B', 'D', 'C'), ('C', 'A', 'B'), ('C', 'A', 'D'), ('C', 'B', 'A'), ('C', 'B', 'D'), ('C', 'D', 'A'), ('C', 'D', 'B'), ('D', 'A', 'B'), ('D', 'A', 'C'), ('D', 'B', 'A'), ('D', 'B', 'C'), ('D', 'C', 'A'), ('D', 'C', 'B')]
# res_3
[[('D',), ('E',), ('F',), ('G',)], [('D', 'E'), ('D', 'F'), ('D', 'G'), ('E', 'D'), ('E', 'F'), ('E', 'G'), ('F', 'D'), ('F', 'E'), ('F', 'G'), ('G', 'D'), ('G', 'E'), ('G', 'F')], [('D', 'E', 'F'), ('D', 'E', 'G'), ('D', 'F', 'E'), ('D', 'F', 'G'), ('D', 'G', 'E'), ('D', 'G', 'F'), ('E', 'D', 'F'), ('E', 'D', 'G'), ('E', 'F', 'D'), ('E', 'F', 'G'), ('E', 'G', 'D'), ('E', 'G', 'F'), ('F', 'D', 'E'), ('F', 'D', 'G'), ('F', 'E', 'D'), ('F', 'E', 'G'), ('F', 'G', 'D'), ('F', 'G', 'E'), ('G', 'D', 'E'), ('G', 'D', 'F'), ('G', 'E', 'D'), ('G', 'E', 'F'), ('G', 'F', 'D'), ('G', 'F', 'E')], [('D', 'E', 'F', 'G'), ('D', 'E', 'G', 'F'), ('D', 'F', 'E', 'G'), ('D', 'F', 'G', 'E'), ('D', 'G', 'E', 'F'), ('D', 'G', 'F', 'E'), ('E', 'D', 'F', 'G'), ('E', 'D', 'G', 'F'), ('E', 'F', 'D', 'G'), ('E', 'F', 'G', 'D'), ('E', 'G', 'D', 'F'), ('E', 'G', 'F', 'D'), ('F', 'D', 'E', 'G'), ('F', 'D', 'G', 'E'), ('F', 'E', 'D', 'G'), ('F', 'E', 'G', 'D'), ('F', 'G', 'D', 'E'), ('F', 'G', 'E', 'D'), ('G', 'D', 'E', 'F'), ('G', 'D', 'F', 'E'), ('G', 'E', 'D', 'F'), ('G', 'E', 'F', 'D'), ('G', 'F', 'D', 'E'), ('G', 'F', 'E', 'D')]]
combinations(p, r)
from itertools import *
res_1 = list(combinations("ABCD", 3))
res_2 = list(combinations([5,2,3,4], 3))
print(res_1)
print(res_2)
---------------------------------------------
#결과
# res_1
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D')]
# res_2
[(5, 2, 3), (5, 2, 4), (5, 3, 4), (2, 3, 4)]
combinations_with_replacement(p, r)
from itertools import *
res_1 = list(combinations_with_replacement("ABCD", 3))
res_2 = list(combinations_with_replacement([5,2,3,4], 3))
print(res_1)
print(res_2)
---------------------------------------------
#결과
# res_1
[('A', 'A', 'A'), ('A', 'A', 'B'), ('A', 'A', 'C'), ('A', 'A', 'D'), ('A', 'B', 'B'), ('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'C'), ('A', 'C', 'D'), ('A', 'D', 'D'), ('B', 'B', 'B'), ('B', 'B', 'C'), ('B', 'B', 'D'), ('B', 'C', 'C'), ('B', 'C', 'D'), ('B', 'D', 'D'), ('C', 'C', 'C'), ('C', 'C', 'D'), ('C', 'D', 'D'), ('D', 'D', 'D')]
# res_2
[(5, 5, 5), (5, 5, 2), (5, 5, 3), (5, 5, 4), (5, 2, 2), (5, 2, 3), (5, 2, 4), (5, 3, 3), (5, 3, 4), (5, 4, 4), (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 3), (2, 3, 4), (2, 4, 4), (3, 3, 3), (3, 3, 4), (3, 4, 4), (4, 4, 4)]
'Python' 카테고리의 다른 글
[Python] 알고리즘의 종류, 종류별 예제 _ 정렬 (4/7) (0) | 2024.09.05 |
---|---|
[Python] 알고리즘의 종류, 종류별 예제 _ DFS/BFS (3/7) (0) | 2024.09.04 |
[Python] 알고리즘의 종류, 종류별 예제 _ 구현 (2/7) (0) | 2024.09.03 |
[Python] 알고리즘의 종류, 종류별 예제 _ 그리디 (1/7) (1) | 2024.09.02 |
[Python] 파이썬으로 모니터 외부입력 전환하기 (2) | 2024.09.02 |