같은 것이 있는 순열 (Class사용예제)

import collections
import itertools
li=['a','a','b','b','b','c']
dic_li=collections.Counter(li)
dic_li
  Counter({'a': 2, 'b': 3, 'c': 1})
cached=[]
for i in itertools.permutations('AABC', 4):
    if not i in cached:
        cached.append(i)
        print(i)
#print('배열은 {}'.format(collections.Counter))
print('배열의 총 개수는 {}개이다.'.format(len(cached)))
  ('A', 'A', 'B', 'C')
('A', 'A', 'C', 'B')
('A', 'B', 'A', 'C')
('A', 'B', 'C', 'A')
('A', 'C', 'A', 'B')
('A', 'C', 'B', 'A')
('B', 'A', 'A', 'C')
('B', 'A', 'C', 'A')
('B', 'C', 'A', 'A')
('C', 'A', 'A', 'B')
('C', 'A', 'B', 'A')
('C', 'B', 'A', 'A')
배열의 총 개수는 12개이다.

import random
class Permu(object):
    listlen=0
    def __init__(self,ball):
        '''공의 모양 출력'''
        self.ball=ball
        Permu.listlen=len(ball)
  
    def random_list(self):
#         print("self.ball",self.ball)
        random.shuffle(self.ball)
        return self.ball
    
    def get_all_case(self, number=Permu.listlen):
        '''number만큼의 경우를 출력하는 함수, 기본은 갯수'''
        cached=[]
        for i in itertools.permutations(self.ball,number):
            if not i in cached:
                cached.append(i)
                print(i)
        print("배열의 총 개수는 {}개이다.".format(len(cached)))
        
       # print(cached)
permu=Permu(['a','c','c','d','d','d'])
permu.get_all_case()
  ('a', 'c', 'c', 'd', 'd')
('a', 'c', 'd', 'c', 'd')
('a', 'c', 'd', 'd', 'c')
('a', 'c', 'd', 'd', 'd')
('a', 'd', 'c', 'c', 'd')
('a', 'd', 'c', 'd', 'c')
('a', 'd', 'c', 'd', 'd')
('a', 'd', 'd', 'c', 'c')
('a', 'd', 'd', 'c', 'd')
('a', 'd', 'd', 'd', 'c')
('c', 'a', 'c', 'd', 'd')
('c', 'a', 'd', 'c', 'd')
('c', 'a', 'd', 'd', 'c')
('c', 'a', 'd', 'd', 'd')
('c', 'c', 'a', 'd', 'd')
('c', 'c', 'd', 'a', 'd')
('c', 'c', 'd', 'd', 'a')
('c', 'c', 'd', 'd', 'd')
('c', 'd', 'a', 'c', 'd')
('c', 'd', 'a', 'd', 'c')
('c', 'd', 'a', 'd', 'd')
('c', 'd', 'c', 'a', 'd')
('c', 'd', 'c', 'd', 'a')
('c', 'd', 'c', 'd', 'd')
('c', 'd', 'd', 'a', 'c')
('c', 'd', 'd', 'a', 'd')
('c', 'd', 'd', 'c', 'a')
('c', 'd', 'd', 'c', 'd')
('c', 'd', 'd', 'd', 'a')
('c', 'd', 'd', 'd', 'c')
('d', 'a', 'c', 'c', 'd')
('d', 'a', 'c', 'd', 'c')
('d', 'a', 'c', 'd', 'd')
('d', 'a', 'd', 'c', 'c')
('d', 'a', 'd', 'c', 'd')
('d', 'a', 'd', 'd', 'c')
('d', 'c', 'a', 'c', 'd')
('d', 'c', 'a', 'd', 'c')
('d', 'c', 'a', 'd', 'd')
('d', 'c', 'c', 'a', 'd')
('d', 'c', 'c', 'd', 'a')
('d', 'c', 'c', 'd', 'd')
('d', 'c', 'd', 'a', 'c')
('d', 'c', 'd', 'a', 'd')
('d', 'c', 'd', 'c', 'a')
('d', 'c', 'd', 'c', 'd')
('d', 'c', 'd', 'd', 'a')
('d', 'c', 'd', 'd', 'c')
('d', 'd', 'a', 'c', 'c')
('d', 'd', 'a', 'c', 'd')
('d', 'd', 'a', 'd', 'c')
('d', 'd', 'c', 'a', 'c')
('d', 'd', 'c', 'a', 'd')
('d', 'd', 'c', 'c', 'a')
('d', 'd', 'c', 'c', 'd')
('d', 'd', 'c', 'd', 'a')
('d', 'd', 'c', 'd', 'c')
('d', 'd', 'd', 'a', 'c')
('d', 'd', 'd', 'c', 'a')
('d', 'd', 'd', 'c', 'c')
배열의 총 개수는 60개이다.

permu.ball
  ['a', 'c', 'c', 'd', 'd', 'd']
permu2=Permu(['a','b','c','E','F'])
permu2.get_all_case()
  ('a', 'b', 'c', 'E', 'F')
('a', 'b', 'c', 'F', 'E')
('a', 'b', 'E', 'c', 'F')
('a', 'b', 'E', 'F', 'c')
('a', 'b', 'F', 'c', 'E')
('a', 'b', 'F', 'E', 'c')
('a', 'c', 'b', 'E', 'F')
('a', 'c', 'b', 'F', 'E')
('a', 'c', 'E', 'b', 'F')
('a', 'c', 'E', 'F', 'b')
('a', 'c', 'F', 'b', 'E')
('a', 'c', 'F', 'E', 'b')
('a', 'E', 'b', 'c', 'F')
('a', 'E', 'b', 'F', 'c')
('a', 'E', 'c', 'b', 'F')
('a', 'E', 'c', 'F', 'b')
('a', 'E', 'F', 'b', 'c')
('a', 'E', 'F', 'c', 'b')
('a', 'F', 'b', 'c', 'E')
('a', 'F', 'b', 'E', 'c')
('a', 'F', 'c', 'b', 'E')
('a', 'F', 'c', 'E', 'b')
('a', 'F', 'E', 'b', 'c')
('a', 'F', 'E', 'c', 'b')
('b', 'a', 'c', 'E', 'F')
('b', 'a', 'c', 'F', 'E')
('b', 'a', 'E', 'c', 'F')
('b', 'a', 'E', 'F', 'c')
('b', 'a', 'F', 'c', 'E')
('b', 'a', 'F', 'E', 'c')
('b', 'c', 'a', 'E', 'F')
('b', 'c', 'a', 'F', 'E')
('b', 'c', 'E', 'a', 'F')
('b', 'c', 'E', 'F', 'a')
('b', 'c', 'F', 'a', 'E')
('b', 'c', 'F', 'E', 'a')
('b', 'E', 'a', 'c', 'F')
('b', 'E', 'a', 'F', 'c')
('b', 'E', 'c', 'a', 'F')
('b', 'E', 'c', 'F', 'a')
('b', 'E', 'F', 'a', 'c')
('b', 'E', 'F', 'c', 'a')
('b', 'F', 'a', 'c', 'E')
('b', 'F', 'a', 'E', 'c')
('b', 'F', 'c', 'a', 'E')
('b', 'F', 'c', 'E', 'a')
('b', 'F', 'E', 'a', 'c')
('b', 'F', 'E', 'c', 'a')
('c', 'a', 'b', 'E', 'F')
('c', 'a', 'b', 'F', 'E')
('c', 'a', 'E', 'b', 'F')
('c', 'a', 'E', 'F', 'b')
('c', 'a', 'F', 'b', 'E')
('c', 'a', 'F', 'E', 'b')
('c', 'b', 'a', 'E', 'F')
('c', 'b', 'a', 'F', 'E')
('c', 'b', 'E', 'a', 'F')
('c', 'b', 'E', 'F', 'a')
('c', 'b', 'F', 'a', 'E')
('c', 'b', 'F', 'E', 'a')
('c', 'E', 'a', 'b', 'F')
('c', 'E', 'a', 'F', 'b')
('c', 'E', 'b', 'a', 'F')
('c', 'E', 'b', 'F', 'a')
('c', 'E', 'F', 'a', 'b')
('c', 'E', 'F', 'b', 'a')
('c', 'F', 'a', 'b', 'E')
('c', 'F', 'a', 'E', 'b')
('c', 'F', 'b', 'a', 'E')
('c', 'F', 'b', 'E', 'a')
('c', 'F', 'E', 'a', 'b')
('c', 'F', 'E', 'b', 'a')
('E', 'a', 'b', 'c', 'F')
('E', 'a', 'b', 'F', 'c')
('E', 'a', 'c', 'b', 'F')
('E', 'a', 'c', 'F', 'b')
('E', 'a', 'F', 'b', 'c')
('E', 'a', 'F', 'c', 'b')
('E', 'b', 'a', 'c', 'F')
('E', 'b', 'a', 'F', 'c')
('E', 'b', 'c', 'a', 'F')
('E', 'b', 'c', 'F', 'a')
('E', 'b', 'F', 'a', 'c')
('E', 'b', 'F', 'c', 'a')
('E', 'c', 'a', 'b', 'F')
('E', 'c', 'a', 'F', 'b')
('E', 'c', 'b', 'a', 'F')
('E', 'c', 'b', 'F', 'a')
('E', 'c', 'F', 'a', 'b')
('E', 'c', 'F', 'b', 'a')
('E', 'F', 'a', 'b', 'c')
('E', 'F', 'a', 'c', 'b')
('E', 'F', 'b', 'a', 'c')
('E', 'F', 'b', 'c', 'a')
('E', 'F', 'c', 'a', 'b')
('E', 'F', 'c', 'b', 'a')
('F', 'a', 'b', 'c', 'E')
('F', 'a', 'b', 'E', 'c')
('F', 'a', 'c', 'b', 'E')
('F', 'a', 'c', 'E', 'b')
('F', 'a', 'E', 'b', 'c')
('F', 'a', 'E', 'c', 'b')
('F', 'b', 'a', 'c', 'E')
('F', 'b', 'a', 'E', 'c')
('F', 'b', 'c', 'a', 'E')
('F', 'b', 'c', 'E', 'a')
('F', 'b', 'E', 'a', 'c')
('F', 'b', 'E', 'c', 'a')
('F', 'c', 'a', 'b', 'E')
('F', 'c', 'a', 'E', 'b')
('F', 'c', 'b', 'a', 'E')
('F', 'c', 'b', 'E', 'a')
('F', 'c', 'E', 'a', 'b')
('F', 'c', 'E', 'b', 'a')
('F', 'E', 'a', 'b', 'c')
('F', 'E', 'a', 'c', 'b')
('F', 'E', 'b', 'a', 'c')
('F', 'E', 'b', 'c', 'a')
('F', 'E', 'c', 'a', 'b')
('F', 'E', 'c', 'b', 'a')
배열의 총 개수는 120개이다.

permu2.ball
  ['a', 'b', 'c', 'E', 'F']
permu3=Permu(['a','b','B','B','B'])
permu3.get_all_case()
  ('a', 'b', 'B', 'B', 'B')
('a', 'B', 'b', 'B', 'B')
('a', 'B', 'B', 'b', 'B')
('a', 'B', 'B', 'B', 'b')
('b', 'a', 'B', 'B', 'B')
('b', 'B', 'a', 'B', 'B')
('b', 'B', 'B', 'a', 'B')
('b', 'B', 'B', 'B', 'a')
('B', 'a', 'b', 'B', 'B')
('B', 'a', 'B', 'b', 'B')
('B', 'a', 'B', 'B', 'b')
('B', 'b', 'a', 'B', 'B')
('B', 'b', 'B', 'a', 'B')
('B', 'b', 'B', 'B', 'a')
('B', 'B', 'a', 'b', 'B')
('B', 'B', 'a', 'B', 'b')
('B', 'B', 'b', 'a', 'B')
('B', 'B', 'b', 'B', 'a')
('B', 'B', 'B', 'a', 'b')
('B', 'B', 'B', 'b', 'a')
배열의 총 개수는 20개이다.

print(random.shuffle(['a','b','c']))
  None

A=['a','b','c']
random.shuffle(A)
A
  ['b', 'a', 'c']
permu3.random_list()
  ['a', 'b', 'B', 'B', 'B']
permu3.random_list()
  ['B', 'B', 'a', 'b', 'B']
permu3.random_list()
  ['B', 'b', 'B', 'a', 'B']

Tags:

Updated:

Leave a Comment