python

[Python] itertools 모듈

CBH_0417 2023. 9. 22. 12:25

https://docs.python.org/ko/3.8/library/itertools.html

*파이썬 공식 사이트  itertools 모듈에 대한 설명

 

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

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

docs.python.org

 

itertools : 파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리

보통 순열과 조합에서 사용된다.

  • permutations(순열)
    • ex) 4개의 서로 다른 공 중에서 2개를 골라 나열하는 경우의 수
    • 순열은 순서가 중요하므로, A B 와 B A 는 다른 경우로 취급
    • nPr = n! / (n-r)! 를 실행시켜 준다.
from itertools import permutations

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

  result = list(permutations(data, 3))

  print(result)
  # [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'),
  # ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
  • combinations(조합)
    • ex) 4개의 공중에서 무작위로 2개의 공을 고르는 경우의 수
    • 조합은 순서가 중요하지 않으므로, A B 와 B A 는 같은 경우로 취급
    • nCr = n! / ((n-r)! * r!) 를 실행시켜 준다.
 from itertools import combinations

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

  result = list(combinations(data, 2))

  print(result)
  # [('A', 'B'), ('A', 'C'), ('B', 'C')]

product

  • product는 permutations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산한다.
  • 다만 원소를 중복하여 뽑는다.
  • product 객체를 초기화할 때는 뽑고자 하는 데이터의 수를 repeat 속상값으로 넣어준다.
  • product는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.
from itertools import product

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

  result = list(product(data, repeat=2))

  print(result)
  # [('A', 'A'), ('A', 'B'), ('A', 'C'), 
  # ('B', 'A'), ('B', 'B'), ('B', 'C'), 
  # ('C', 'A'), ('C', 'B'), ('C', 'C')]