2016-02-27 75 views
1

在Python中,我怎麼能寫得到一些數n,打印所有可能的詞(A-Z)的函數排列(帶替換)時length=n蟒蛇 - 獲取與更換所有可能的組合,而無需遞歸

不使用遞歸,並且不使用外部功能,如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 
+3

看到代碼的文檔https://docs.python.org/3/library/itertools.html#itertools.combinations – vaultah

+0

我覺得像格式化你說的「與更換」 ......至少這是你在你的例子在做什麼是非常重要的 – purpletentacle

+1

正確的鏈接,combinations_with_replacement是在這裏:https://docs.python.org/3/library/itertools.html #itertools.combinations_with_replacement – purpletentacle

回答

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。

編輯:小的調整,以便輸出在你的問題