데이터 분석/python

itertools 순열/조합

fullfish 2025. 10. 13. 10:10
import itertools

 

조합 (combinations)

from itertools import combinations

arr = ['A', 'B', 'C']
result = list(combinations(arr, 2))
print(result)  # [('A', 'B'), ('A', 'C'), ('B', 'C')]

 

중복 조합 (combinations_with_replacement)

from itertools import combinations_with_replacement

arr = ['A', 'B', 'C']
result = list(combinations_with_replacement(arr, 2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

 

순열 (permutations)

from itertools import permutations

arr = ['A', 'B', 'C']
result = list(permutations(arr, 2))
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

 

중복 순열 (product)

from itertools import product

arr = ['A', 'B', 'C']
result = list(product(arr, repeat=2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'),
#  ('B', 'A'), ('B', 'B'), ('B', 'C'),
#  ('C', 'A'), ('C', 'B'), ('C', 'C')]

# 여러 리스트 동시에
for x, y in product([1, 2], ['A', 'B']):
    print(x, y)

# (1, 'A')
# (1, 'B')
# (2, 'A')
# (2, 'B')

 

문자열 합치기

[''.join(t) for t in result]
# ['AB', 'AC', 'BA', 'BC', 'CA', 'CB']

 

이터레이터(iterator)

from itertools import combinations

result = combinations(["a", "b", "c"], 2)
a = list(result)
b = ["".join(i) for i in result]
print(b) # []
# itertools.combinations() 가 반환하는 건 리스트가 아니라 “이터레이터(iterator)
# 한 번 순회하면 내부 데이터가 소진