python - 获取所有可能的替换组合而不递归

时间:2016-02-27 17:12:24

标签: python string permutation

在python中,我怎样才能编写一个函数来获取一些数字n并在length=n时打印所有可能的单词(a-z)排列(替换)。

不使用递归而不使用itertools.permutationsitertools.combinations等外部函数。

例如: n=2应打印

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  

1 个答案:

答案 0 :(得分:1)

基本上你在数。这是一个例子。试图保持简单,因此很容易遵循:

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)

您真正处理项目的唯一方法是使用get_string。

编辑:小调整,以便输出格式与您的问题一样