2013-10-15 4 views
-2

Я работаю над программой на основе дерева на python. Мне нужно переписать эту функцию с помощью рекурсии и ликвидировать все эти за-петель:Дерево рекурсии Python (для цикла)

Пример моей функции:

def items_on_level(full_tree, level): 
    for key0, value0 in full_tree.items(): 
     for key1, value1 in value0.items(): 
      for key2, value2 in value1.items(): 
       for key3, value3 in value2.items(): 
        print(key3) 

Вход:
- уровень - уровень моего рекурсии дерева
- full_tree - Сыроватского с родителями и детьми

{<Category: test>: {<Category: dkddk>: {}, <Category: test2>: {<Category: test3>: {}, <Category: test5>: {<Category: kfpokpok>: {}}}} 

Функция должна возвращать: все объекты на текущем уровне

Помощь! Благодаря!

+1

Является ли это домашнее задание? –

+0

Что делает '<>' в ''? – Hyperboreus

+3

Я думаю, что знаю, для какого класса это для. Интересно, если я должен отправить prof на адрес электронной почты – inspectorG4dget

ответ

2
def itemsOnLevel(root, level): 
    if not level: 
    return list(root.keys()) 
    else: 
    return list(itertools.chain.from_iterable([itemsOnLevel(v, level-1) for k,v in root.items()])) 
1
itemsOnLevel = lambda r, l: (
    lambda f, r, l: f (f, r, l)) (
    lambda f, r, l: [_ for _ in r.keys() ] if not l else 
    [i for k in r.values() for i in f (f, k, l - 1) ], r, l) 
+0

Я не думаю, что когда-либо была хорошая причина писать рекурсивные лямбда-выражения в Python. Используйте регулярные функции, это сломает ваш мозг меньше. – Blckknght

+0

@Blckknght Ну, мой ответ не выглядел бы так, если бы не было очевидно, что это домашнее задание. Но тем не менее он работает ... – Hyperboreus

0

Я думаю, это поможет немного

if(full_tree != {}): 

    for node in return_list_current_level(full_tree): 
     items_on_level(node, level+1) 
else: 
    return None 
0
def onl(r,l): 
    if l: 
    obj=[] 
    for i in [onl(v,l-1) for v in r.values()]: 
     obj.extend(i) 
    return obj 
    return r.keys() 
+0

Спасибо большое! Можно ли переписать эту функцию как тег шаблона? –

+0

Я не понимаю, почему этого не должно быть. –

+0

И еще один вопрос. Как написать тег шаблона, который возвращает все дочерние объекты (из словаря full_tree). Проблема в том, что шаблон должен использоваться переменной. Что-то вроде этого: {{child item_name}} item_name - название объекта Это самое важное для меня сейчас. Буду признателен, если вы поможете мне. –

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