2014-01-30 61 views
0

我寫了下面的代碼,使用遞歸的幫助下生成元素的具體數目的所有可能的組合:爲什麼列表不會附加到我的全局列表中?

global_values = [] 
parameters = [1,2,3,4,5,6] 
content = ["x","y","v","sd"] 

def rec(values, depth): 
    if(depth == 0): 
     global_values.append(values) 
     print values 
     return 

    for i in range(0,len(parameters)): 
     values.append(parameters[i]) 
     rec(values,depth-1) 
     values.pop() 
    return 

rec([],len(content)) 

print "!!!!----------!!!!" 
print global_values 

「打印‘價值’,」語句打印正確的結果,但我想將此結果附加到全局列表。爲什麼這不起作用?

隨着

parameters = [1,2,3] 
content = ["x","y"] 

我得到的輸出:

[1, 1] 
[1, 2] 
[1, 3] 
[2, 1] 
[2, 2] 
[2, 3] 
[3, 1] 
[3, 2] 
[3, 3] 
!!!!----------!!!! 
[[], [], [], [], [], [], [], [], []] 

但我想充滿前打印的值的最後名單。

+0

你有沒有理由不能使用'itertools.combinations()'? –

+0

@mhlester你說得對。我只看了一下代碼,看到OP在本地修改一個全局,而沒有聲明它。在我評論之前,我應該已經意識到發生了什麼事情。哎呀! = P – That1Guy

回答

3

當您將values附加到global_values時,列表values中有數字。但是,您稍後會刪除這些數字,因此追加到global_values的列表現在爲空。發生此問題的原因是,只有一個列表values不斷得到重用。

要明白我的意思嘗試:

list1 = [] 
list2 = [5,9] 
list1.append(list2) 
list2.pop() # Because list2 is inside list1, this changes the contents of list1 
print list1 # Prints [[5]] 

要追加副本values使用global_values.append(values[:])