2014-01-30 37 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[:])