2014-02-19 38 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]