python – get all possible permutations with replacement without recursion

Question:

In python, how can I write a function that get some number n and print all possible words(a-z) permutations(with replacement) when length=n.

Without using recursion and without using external functions like itertools.permutations, itertools.combinations etc..

For example:
n=2 should print

aa ba ... za
ab bb ... zb
...
az bz ... zz

n=3

aaa baa ... zaa
aba aca ... aza
aab aac ... aaz
abb abc ... abz
acb acc ... acz
...
azz bzz ... zzz  
Asked By: A.Sh

||

Answers:

Basically you are counting. Here is an example. A tried to keep it simple so it is easy to follow:

def get_string(idxlist, item_list):
    return ''.join([item_list[i] for i in idxlist])

def increment_vector(idxlist, max_count):
    idxlist[0] += 1
    for i in xrange(len(idxlist)-1):
        if idxlist[i] < max_count:
            break
        idxlist[i]=0
        idxlist[i+1] += 1

def generate(n, item_list):
    max_count = len(item_list)

    idxlist = [0] * n
    while idxlist[-1] < max_count:
        print ( get_string( idxlist, item_list )),
        increment_vector(idxlist, max_count)
        if idxlist[0]==0:
            print 

item_list = map(chr, range(97, 123)) # letters from a-z

generate(3, item_list)

The only point where you really work with your items is in get_string.

EDIT: small adjustment so the output is formatted like in your question

Answered By: Juan Leni
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.