오늘 나는 (TIL)

[TIL 240808] Python의 Itertools 라이브러리 순열과 조합

thebuck104 2024. 8. 7. 13:21

오늘은 iteration에 도움이 되는 여러가지 메소드가 있는 

Python의 itertools 라이브러리를 소개해보겠다.

 


itertools란

 

" 효율적인 루핑을 위한 이터레이터를 만두는 함수 "

 

1. combinations()

list를 n 수 만큼 컴비네이션들을 튜플 형식으로 만들어준다.

from itertools import combinations

l = [1,2,3]

for i in combinations(l,2):
	print(i)

# 출력 결과:
# (1, 2)
# (1, 3)
# (2, 3)


# 리스트화해서 인덱싱 콜 하기
combi = list(combinations(l, 2))
print (combi[0])

# 출력 결과:
# (1, 2)

 

2. combinations_with_replacement()

 

list를 n수 만큼, 중복을 허용하며 컴비네이션들을 튜플 형식으로 반환해준다.

from itertools import combinations_with_replacement

l = ['A', 'B', 'C']

for i in combinations_with_replacement(l,2):
	print(i)

# 출력결과:
# ('A', 'A')
# ('A', 'B')
# ('A', 'C')
# ('B', 'B')
# ('B', 'C')
# ('C', 'C')

 

3. permutations()

 

list에서 퍼뮤테이션들을 반환해준다!

 

from itertools import permutations

l = ['A', 'B', 'C']

for i in permutations(l): #n을 지정하지 않거나 n=None으로 하면 최대 길이의 순열이 반환된다
	print(i)

# 출력결과:
# ('A', 'B', 'C')
# ('A', 'C', 'B')
# ('B', 'A', 'C')
# ('B', 'C', 'A')
# ('C', 'A', 'B')
# ('C', 'B', 'A')

 

4. product()

여러 리스트를 사용할 때 쓰는 함수

from itertools import product

l1 = ['A', 'B']
l2 = ['1', '2']

for i in product(l1,l2,repeat=1): # l1과 l2의 모든 쌍을 지어 리턴한다
	print(i)

# 출력결과:
# ('A', '1')
# ('A', '2')
# ('B', '1')
# ('B', '2')



for i in product(l1,repeat=3): # product(l1,l1,l1,repeat=1)과 동일한 출력
	print(i)

# 출력결과:
# ('A', 'A', 'A')		# combinations_with_replacement(l, 3) 과 같다
# ('A', 'A', 'B')
# ('A', 'B', 'A')
# ('A', 'B', 'B')
# ('B', 'A', 'A')
# ('B', 'A', 'B')
# ('B', 'B', 'A')
# ('B', 'B', 'B')