2015-02-10 1 views
0

У меня есть словарь под названием обход. Для данного ключа у меня есть массив значений. Я хочу, чтобы рекурсивно вызывать функцию traverse столько раз, сколько у меня значений в этом массиве, каждый раз удаляя один из них.Рекурсивное вызов функции - отправить глубокую копию dict без элемента

До сих пор у меня есть это:

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

+0

Как вы узнаете, как остановиться? Рекурсивным функциям нужен условный оператор, который сообщает ему, что он закончен. –

+0

На каждом этапе рекурсии я хочу удалить один элемент из словаря с обходным путем. Когда обход пустой, у меня есть «return» в коде. – Perlnika

ответ

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]} 
>>> 

Не видя больше кода или данных, трудно определить, действительно ли это то, что вы действительно хотите или что нужно.

Смежные вопросы