특정 조건을 반복할 때 유용하게 쓰이는 파이썬의 내장 함수입니다.
순열, 조합 (permutations, combinations)
순열: 전체 아이템 n개 중에 r개를 나열
조합: 전체 아이템 n개 중에 r개를 선택 (중복된 조합 불가)
from itertools import permutations, combinations
letters = ['A', 'B', 'C']
p = permutations(letters, 2) # 3개의 알파벳 중 2개를 사용하여 순열
print(list(p))
'''
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
'''
c = combinations(letters, 2) # 3개의 알파벳 중 2개를 사용하여 조합
print(list(c))
'''
[('A', 'B'), ('A', 'C'), ('B', 'C')]
'''
combinations_with_replacement 를 통해 중복 조합을 가능하게 할 수 있습니다
from itertools import combinations_with_replacement
letters = ['A', 'B', 'C']
res = list(combinations_with_replacement(letters, 2))
print(res)
'''
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
'''
product
전체 아이템 중 n개를 묶는 방법입니다.
combinations_with_replacement와의 차이점은 같은 아이템 쌍이라 할지라도 순서가 다르게 나온다는 점입니다
(예: ('A', 'B') 와 ('B', 'A') 둘다 출현).
from itertools import product
letters = ['A', 'B', 'C']
res = list(product(letters, repeat=2)) #3개의 알파벳 중 2개를 사용하여 묶음 (같은 알파벳 허용)
print(res)
'''
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
'''
아래와 같이 2가지 이상의 아이템 list들을 묶는 데에도 사용이 됩니다.
from itertools import product
numbers = [1, 2]
letters = ['A', 'B']
korean = ['가', '나']
print(list(product(numbers, letters, korean)))
'''
[(1, 'A', '가'), (1, 'A', '나'), (1, 'B', '가'), (1, 'B', '나'),
(2, 'A', '가'), (2, 'A', '나'), (2, 'B', '가'), (2, 'B', '나')]
'''
compress
같은 길이의 list를 2개 받은 뒤 (첫번째: 유지하거나 제거할 list, 두번째 1/0 or True/False로 이루어진 list)
2번째의 list가 1 or True이면 유지, 0 or False이면 첫번째 list에서 동일 index를 제거하는 방법입니다.
아래 예시를 보시면 true_or_false의 첫번째, 세번째 항목이 1, 1 나머지 항목이 0이기 때문에,
letters 이름의 list에서 'A', 'C'만 유지되고 나머지 아이템은 제거가 되었습니다.
from itertools import compress
letters = ['A', 'B', 'C', 'D', 'E']
true_or_false = [1, 0, 1, 0, 0]
#true_or_false = [True, False, True, False, False]
print(list(compress(letters, numbers)))
'''
['A', 'C']
'''
repeat
특정 아이템을 단순히 n번 반복해주는 함수입니다.
from itertools import repeat
print(list(repeat('Hello', 3)))
'''
['Hello', 'Hello', 'Hello']
'''
'Python' 카테고리의 다른 글
[작성중] Selenium을 통한 잡플래닛 (Jobplanet) 면접 후기 가져오기 (0) | 2023.03.10 |
---|---|
[파이썬] 순서 유지하면서 특정 list에 있는 단어만 남기기 (0) | 2021.07.19 |
[파이썬] 문장에서 특정 값 이후부터 삭제 (0) | 2021.07.18 |
[파이썬] 사전 (dictionary)을 통한 단어 바꾸기 (0) | 2021.07.18 |
[파이썬] bisect (0) | 2021.07.02 |