✏️ [Algorithm] itertools 라이브러리에 대해서

2026. 7. 30. 01:51·Algorithm/Algorithm

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

⭐️ 서론

알고리즘 풀이를 하다보니 조합, 순열, 중복 순열 개념이 자주 등장하는 것을 알았다.
물론 직접 코드로 구현할수도 있지만, itertools 라이브러리에 이미 구현되어 있기에 잘 이용한다면 큰 도움이 될 것 같아서 정리를 한다.

⭐️ itertools: 효율적인 루핑을 위한 iterator를 만드는 함수

파이썬 공식 문서

itertools의 여러가지 함수 중 조합형 iterator

  • combinations()
  • combinatios_with_replacement()
  • product()
  • permutations()

📌 combinations(iterable, r): iterable에서 원소 개수가 r개인 조합 뽑기

from itertools import combinations

l = [1,2,3]

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

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

파이썬 공식 문서에 따르면 입력 iterable의 순선에 따라 사전식 순서로 방출된다.
따라서, 입력 iterable이 정렬되어 있으면, 조합 튜플이 정렬된 순서로 생성된다.

📌 combinatios_with_replacement(iterable, r): iterable에서 원소 개수가 r개인 중복 조합 뽑기

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')

📌 permutations(iterable,r=None): iterable에서 원소 개수가 r개인 순열 뽑기

from itertools import permutations

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

for i in permutations(l, 3): #r을 지정하지 않거나 r=None으로 하면 최대 길이의 순열이 리턴된다!
    print(i)

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

📌 product(*iterables, repeat=1): 여러 iterable의 중복 순열 뽑기

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')
('A', 'A', 'B')
('A', 'B', 'A')
('A', 'B', 'B')
('B', 'A', 'A')
('B', 'A', 'B')
('B', 'B', 'A')
('B', 'B', 'B')

product는 다른 함수와 달리 인자로 여러 iterable을 넣어줄 수 있고, 그 iterable간의 모든 짝을 지어서 리턴한다.

이 외에도 itertools가 제공하는 함수는 매우 많다. 필요에 따라 조합, 순열 등이 필요한 문제에 적용하면 좋다.

추가적인 사항은 아래 출처의 파이썬 공식 문서를 참고하자.


출처
파이썬 공식 문서

'Algorithm > Algorithm' 카테고리의 다른 글

[BOJ, Python] 백준 NZEC(Non-Zero Exit Code) 오류  (0) 2026.07.31
[BOJ, Python] 1699번_제곱수의 합  (0) 2026.07.31
[BOJ, Python] 백준 3151번_합이 0  (0) 2026.07.30
[BOJ, python] 20922번_겹치는 건 싫어  (0) 2026.07.30
[BOJ, Python] 2294번_동전 2  (0) 2026.07.30
'Algorithm/Algorithm' 카테고리의 다른 글
  • [BOJ, Python] 백준 NZEC(Non-Zero Exit Code) 오류
  • [BOJ, Python] 1699번_제곱수의 합
  • [BOJ, Python] 백준 3151번_합이 0
  • [BOJ, python] 20922번_겹치는 건 싫어
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    트러블슈팅
    게시판
    척척학사
    나의 작은 프로젝트
    java
    Spring
    개념 정리!
    Algorithm
    http
    jpa
    interview
    HTTP WEB 기본 지식
    Project
    BOJ
    object
    Python
    Book
    CS Interview
    Spring MVC
    OS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
✏️ [Algorithm] itertools 라이브러리에 대해서
상단으로

티스토리툴바