알고리즘 문제

[알고리즘/Python] itertools 라이브러리 사용법(조합,순열)

Everyday Happy ❤︎ 2024. 1. 4. 12:00

파이썬 itertools 공식문서 ▾

 

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

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 이 모듈은 APL, Haskell 및 SML의 구성물들에서 영감을 얻은 여러 이터레이터 빌딩 블록을 구현합니다. 각각을 파이썬에 적합한 형태로

docs.python.org

파이썬 Itertools 라이브러리(or 모듈)에는 많은 함수들이 있다.

그 중에서도 조합/순열 함수인 아래 4가지 함수에 대해서 알아보자.

combinations()
combinations_with_replacement()
product()
permutations()

 

1. combinations(iterable, r)

iterable에서 원소 개수가 r개인 조합 뽑기

from itertools import combinations

if __name__ == '__main__':
	iterator = [1, 2, 3, 4]
    for i in combinations(iterator, 3):
    print(i)
 (1, 2, 3)
 (1, 2, 4)
 (1, 3, 4)
 (2, 3, 4)

2. combinations_with_replacement(iterable, r)

 

 iterable에서 원소 개수가 r개인 중복 조합 뽑기

from itertools import combinations_with_replacement

if __name__ == '__main__'
	iterator = [1, 2, 3, 4]
    for i in combinations_with_replacement(iterator, 2):
    	print(i)
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 2)
(2, 3)
(2, 4)
(3, 3)
(3, 4)
(4, 4)

3. permutations(iterable, r)

 iterable에서 원소 개수가 r개인 순열 뽑기

from itertools import permutations

if __name__ == '__main__':
	iterator = [1, 2, 3, 4]
    for in permutations(iterator, 2):
    	print(i)
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 4)
(4, 1)
(4, 2)
(4, 3)
import itertools

arr = ['A', 'B', 'C']
nCr = itertools.combinations(arr, 2)
print(list(nCr))

결과 : [('A', 'B'), ('A', 'C'), ('B', 'C')]

4. product(*iterables, repeat=1)

여러 iterable의 데카르트곱 반환

from itertools import product

if __name__ == '__main__'
	iterator1 == ['A', 'B', 'C']
    iterator2 == ['1', '2', '3']
    
    for i in product(iterator1, iterator2, repeat=1):
    	print(i)
('A', '1')
('A', '2')
('A', '3')
('B', '1')
('B', '2')
('B', '3')
('C', '1')
('C', '2')
('C', '3')
from itertools import product

if __name__ == '__main__'
	iterator1 == ['A', 'B', 'C']
    iterator2 == ['1', '2', '3']
    
    for i in product(iterator1, iterator2, repeat=2):
    	print(i)
('A', '1', 'A', '1')
('A', '1', 'A', '2')
('A', '1', 'A', '3')
('A', '1', 'B', '1')
('A', '1', 'B', '2')
('A', '1', 'B', '3')
('A', '1', 'C', '1')
('A', '1', 'C', '2')
('A', '1', 'C', '3')
('A', '2', 'A', '1')
...