티스토리 뷰

반응형

파이썬 iterable 의 원소로 순열과 조합을 구한다.

  • permutation

    순열이란 몇 개를 골라 순서를 고려해 나열한 경우의 수를 의미한다. 즉, 서로 다른 n 개 중에 r 개를 골러 순서있게 나열하는 가짓수 이다.

    순열은 순서를 고려한다.

    예)

    • 1,2,3 의 숫자가 적힌 카드가 있을 때, 이 중 두 장을 꺼내는 경우의 수 → 12, 13, 21, 23, 31, 32

    • 'A','B','C' 로 만들 수 있는 경우의 수 → 'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'

      itertools.permutation 을 이용하면 for 문을 사용하지 않고 순열을 구할 수 있다.

      import itertools 
      
      pool =['A','B','C']
      print(list(map(''.join, itertools.permutations(pool)))) # 3 개의 원소로 수열 만들기
      print(list(map(''.join, itertools.permutations(pool,2)))) #  2 개의 원소로 수열 만들기
      
      arr = ['A','B','C']
      
      nPr   = itertools.permutations(arr,2)
      print(list(nPr))
      #결과 : [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
      
  • combination

    조합이라는 것은 순서를 고려하지 않고 서로다른 n 개 중에 r 개를 취해 조를 만들떄, 하나하나의 조를 n개 중에서 r개를 취한 조합이라고 생각하자.

    조합은 순서를 고려하지 않기 때문에 [A, B, C]의 리스트에서 2개의 원소를 골라 나열하면

    [(A, B), (A, C), (B, C)] 가 나오게 된다. 조합은 (A, B)와 (B, A)는 같은 것으로 취급한다.

      import itertools
    
      arr = ['A','B','C']
    
      nCr = itertools.combinations(arr,2)
      print(list(nCr))
      결과 : [('A', 'B'), ('A', 'C'), ('B', 'C')]
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함