Welcome, guest | Sign In | My Account | Store | Cart
def genbags(P,L = []):
    if not max(P):
        yield L
    else:
        for i,x in enumerate(P):
            if x: 
                P[i] -= 1
                for b in genbags(P,L+[i]): 
                    yield b
                P[i] += 1                

def histogram(seq):
    L = []
    R = []
    for i,x in enumerate(seq):
        try:
            R[L.index(x)] += 1
        except ValueError:
            R.append(1)
            L.append(x)
    return L,R

def perm(seq):
    L,R = histogram(seq)
    for Z in genbags(R):
        yield [L[i] for i in Z]
    
def test():
    P = [1],[1],[2],[3]
    for b in perm(P): 
        print b

if __name__=='__main__':
    test()

History

  • revision 4 (17 years ago)
  • previous revisions are not available