2017-03-18 28 views
0
def divinding(a): 
    b=[] 
    c=[] 
    a.sort() 
    for i in a: 
     if(i%a[0])==0: 
      b.append(i) 
     else: 
      pass 
    if(len(b)>2): 
     store(b) 
    else: 
     pass 
    if(len(a)>1): 
     a.pop(0) 
     divinding(a) 

def store(b): 
    c=[] 
    c.append(b) 
    print c 
divinding([2, 11, 16, 12, 36, 60, 71, 17, 29, 144, 288, 129, 432, 993]) 

列表追加到另一個列表在此代碼獲取所有值seperately如何使用循環

[[2, 12, 16, 36, 60, 144, 288, 432]],[[12, 36, 60, 144, 288, 432]],[[16, 144, 288, 432]],[[36, 144, 288, 432]],[[144, 288, 432]] 

,但我需要在一個列表

[2, 12, 16, 36, 60, 144, 288, 432],[12, 36, 60, 144, 288, 432],[16, 144, 288, 432],[36, 144, 288, 432],[144, 288, 432] 

這樣所有值。

回答

1

你並不需要一個store功能在所有;它所做的只是把b換成c然後打印c。相反,我建議直接在divinding [原文如此]中添加bc。使用append添加bextend,以便在a.pop(0)之後將遞歸調用返回的c中的所有元素添加到dividing(a)

def dividing(a): 
    c = [] 
    a.sort() 
    b = [i for i in a if i % a[0] == 0] 
    if len(b) > 2: 
     c.append(b) 
    if len(a) > 1: 
     a.pop(0) 
     c.extend(dividing(a)) 
    return c 

結果現在還沒有通過函數直接打印,但返回:

>>> result = dividing([2, 11, 16, 12, 36, 60, 71, 17, 29, 144, 288, 129, 432, 993]) 
>>> print result 
[[2, 12, 16, 36, 60, 144, 288, 432], [12, 36, 60, 144, 288, 432], [16, 144, 288, 432], [36, 144, 288, 432], [144, 288, 432]] 
0

定義的存儲功能外 'C',例如

c = [] 

def store(b): 
    c.append(b) 

輸出是:

c 

Out[11]: [[2, 12, 16, 36, 60, 144, 288, 432],[12, 36, 60, 144, 288, 432],[16, 144, 288, 432],[36, 144, 288, 432],[144, 288, 432]] 
+1

注意,這會產生有趣的結果,如果函數被調用一次以上。 –