2015-02-10 57 views
0

我有一個字典叫做遍歷。對於給定的密鑰,我有一系列值。我想以遞歸的方式調用函數遍歷的次數與我在這個數組中每次刪除其中一個的次數一樣多。函數的遞歸調用 - 發送字典的深度副本沒有元素

到目前爲止,我有這樣的:

for i in xrange(0,length-1,1): 
    print ("try branch with value: " + next + " and index " + str(i)) 

    next=(traversal[key])[i] 
    result=result+key[i] 

    #here you need to remove next from traversal 
    traverse(100,result,copy.deepcopy(traversal),next) 

不過,我需要修改它,這樣,而不是字典穿越,我會送字典的深拷貝的深拷貝沒有的一個值。這樣的事情:

traverse(100,result,copy.deepcopy(del (traversal[key])[i]),next) 

任何意見如何寫這個?

+0

我修正了壓痕。 – Perlnika 2015-02-10 19:10:53

+0

你怎麼知道如何停止?遞歸函數需要一個條件語句來告訴它它已經完成。 – 2015-02-10 19:13:52

+0

在遞歸的每一步,我想從名爲traversal的字典中刪除一個元素。遍歷爲空時,我在代碼中「返回」。 – Perlnika 2015-02-10 19:15:55

回答

0

它看起來像詞典值是序列,你是按順序遍歷這些序列。複製完成後,您可以使用切片從副本的值中移除元素。

>>> d 
{1: [1, 2, 3]} 
>>> e = copy.deepcopy(d) 
>>> e 
{1: [1, 2, 3]} 
>>> i = 0 
>>> key = 1 
>>> v = e[key] 
>>> v = v[:i] + v[i+1:] 
>>> e[key] = v 
>>> e 
{1: [2, 3]} 
>>> d 
{1: [1, 2, 3]} 
>>> 

沒有看到更多的代碼或數據,很難判斷這是你真正想要還是需要的。