[Python] 파이썬 순열과 조합

1 분 소요

파이썬 순열과 조합👩

  • 파이썬에서 주어진 리스트에 대해서 순열과 조합을 구할 경우, itertools를 사용하여 손쉽게 그 값들을 구할 수 있다.


🙋‍♀️ permutations: 순열(nPr)

  • 순열이란 서로 다른 n개 중에서 r개를 취해 순서를 정해 나열한 것이다.
  • 즉, 순서가 중요하여 (a, b)와 (b, a)는 서로 다른 것으로 간주한다.
  • permutations(반복 가능한 객체, r)
   from itertools import permutations

    a = [1, 2, 3]
    b = permutations(a)
    # [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]


🙋‍♀️ combinations: 조합(nCr)

  • 조합은 서로 다른 n개 중에서 r개를 취해 순서를 고려하지 않고 조를 만드는 것이다.
  • 즉, 순서는 중요하지 않으므로 (a, b)와 (b, a)는 서로 동일한 것으로 간주한다.
  • combinations(반복 가능한 객체, r)
  from itertools import combinations

  a = [1, 2, 3]
  b = combinations(a, 2)
  # [(1, 2), (1, 3), (2, 3)]


🙋‍♀️ product: 데카르트 곱

  • 두 개 이상의 리스트모든 조합을 구할 수 있다.

하나의 리스트 속 여러 문자열에 대한 데카르트 곱 👩

  from itertools import product

    a = ["abc", "!@#"]
    b = product(*a)
    # ('a', '!'), ('a', '@'), ('a', '#'), ('b', '!'), ('b', '@'), ('b', '#'), ('c', '!'), ('c', '@'), ('c', '#')

* 리스트 a에 있는 두 문자열에 대한 곱집합을 구하는 과정이다.


여러 리스트에 대한 데카르트 곱 👩

  from itertools import product

  a = ["abc", "!@#"]
  b = [1, 2]
  ab = product(a, b)

  #('abc', 1), ('abc', 2), ('!@#', 1), ('!@#', 2)

  • 두 리스트의 모든 조합을 구하는 과정이다.


🙋‍♀️ product(반복 가능한 객체, reapeat = ?) : 중복 순열

  • product에 repeat을 설정하면 중복 순열을 구할 수 있게 된다.
  from itertools import product

  a = ["abc", "!@#"]
  b = product(a, repeat = 2)
  # [('abc', 'abc'), ('abc', '!@#'), ('!@#', 'abc'), ('!@#', '!@#')]

  • 즉, [“abc”, “abc”, “!@#”, “!@#”]을 가지고 순열을 구한 것과 동일한 결과를 확인 할 수 있다.

📃 참고

댓글남기기