2014-02-19 78 views
0

在學校之前,我已經完成了這個算法,但我忘記了如何去做。基本上我想返回的結果是像 'A [0]', 'A [0] .A [0]' 串...Python中的排列增長算法和打印字符串

length = range(0,2) #length = 2 
depth = range(0,3) #depth = 3 

for i in length: 
    for k in depth: 
     … print each permutation 

結果

a[0] 
a[0].a[0] 
a[0].a[1] 
a[0].a[0].a[0] 
a[0].a[0].a[1] 
a[0].a[1].a[0] 
a[0].a[1].a[1] 
a[1] 
a[1].a[0] 
a[1].a[1] 
a[1].a[0].a[0] 
a[1].a[0].a[1] 
a[1].a[1].a[0] 
a[1].a[1].a[1] 
+0

如果改變長度和深度,使它們不相等,那麼什麼結果是什麼樣子? –

+0

結果排序的邏輯是什麼?爲什麼'a [0]'的孩子將'a [0]'和'a [1]'分隔開,但同時'a [2] .a [0]'後面緊跟'a [2 ] .a [1]'孩子們追趕那些人? – Hyperboreus

+0

對不起,我改變了它的混亂。 – chimpsarehungry

回答

2

更改位輸出的排序,所以這是對各級相同:

def thing (length, depth, prefix = None): 
    if not depth: return 
    if not prefix: prefix = [] 
    for l in range (length): 
     r = prefix + ['a[{}]'.format (l) ] 
     yield '.'.join (r) 
     for r in thing (length, depth - 1, r): 
      yield r 

for x in thing (2, 3): print (x) 

輸出是:

a[0] 
a[0].a[0] 
a[0].a[0].a[0] 
a[0].a[0].a[1] 
a[0].a[1] 
a[0].a[1].a[0] 
a[0].a[1].a[1] 
a[1] 
a[1].a[0] 
a[1].a[0].a[0] 
a[1].a[0].a[1] 
a[1].a[1] 
a[1].a[1].a[0] 
a[1].a[1].a[1] 
+0

偉大的編碼,你真的鞭打出來 – chimpsarehungry

+0

什麼樣的功能是 – chimpsarehungry

+0

一個發電機。就像一個共同的例程,但不完全。 – Hyperboreus

1

另一種方法;正如Hyperboreus指出的那樣,關鍵在於意識到第一元素的排序與以下元素的排序不匹配;所以我分別處理它們。

from itertools import product 

def item_fmt(i): 
    return "a[{}]".format(repr(i)) 

def make_result(*args): 
    return ".".join(item_fmt(arg) for arg in args) 

def main(): 
    items = [0, 1] 
    maxdepth = 3 

    for first in items:    # in order by first-item 
     print(make_result(first)) # show first-item-only 
     for depth in range(1, maxdepth):    # in order by depth 
      for combo in product(items, repeat=depth): # generate all combinations of given depth 
       print(make_result(first, *combo)) 

if __name__=="__main__": 
    main() 

結果

a[0] 
a[0].a[0] 
a[0].a[1] 
a[0].a[0].a[0] 
a[0].a[0].a[1] 
a[0].a[1].a[0] 
a[0].a[1].a[1] 
a[1] 
a[1].a[0] 
a[1].a[1] 
a[1].a[0].a[0] 
a[1].a[0].a[1] 
a[1].a[1].a[0] 
a[1].a[1].a[1]