2014-12-04 5 views
0

Я пытаюсь создать список «путей» для каждого элемента в _list. например, список ввода:создание путей дерева данных, рекурсивно итерация по вложенным спискам в python

_list = [[x,x,x], [[x,x,x],[x,x,x]], [x,x,x]] 

желаемый результат:

_list = [\ 
     [[0,0,0],[0,0,0],[0,0,0]], \ 
     [[[0,1,0],[0,1,0],[0,1,0]],[[0,1,1],[0,1,1],[0,1,1]]] \ 
     [[0,2,0], [0,2,0], [0,2,0]]] 

идея заключается в том, что я создаю путь к дереву данных похожее на это:

http://studiomaven.org/images/2/2c/Grasshopper_Data_Tree.png

где первый ветвь равна 0. тогда, поскольку _list имеет три (3) списка в ней, тогда ветви первого второго уровня - [0,0] [0,1] и [0,2], тогда, когда [0,1] имеет еще один список в это тогда другое уровень должен быть добавлен, когда все элементы в первой ветви равны [0,0,0], вторые - [0,1,0] и [0,1,1], поскольку в этой ветви есть два списка, а затем последняя ветвь [0,2,0].

Пример 2: Входной сигнал:

_list = [x,x,x,x] 

Выход:

_list = [[0],[0],[0],[0]] 

Пояснение: Так как его единый список глубина вся информация находится на первом [0] ветви. Каждый элемент х имеет путь [0]

Пример 3: Входной сигнал:

_list = [[x,x,x],[x,x,x]] 

Выход:

_list = [[[0,0],[0,0],[0,0]],[[0,1],[0,1],[0,1]]] 

Пояснение: _List содержит два списка, чтобы первая ветвь 0 имеет еще две ветви в теме. В этом случае все элементы на этой ветви уровня равны [0,0] и на второй ветви [0,1].

Это можно сделать рекурсивно каким-то образом, что будет работать с любой глубиной/сложностью списка списков?

Я понимаю, что это не ошибка/проблема, но я немного нуб, и рекурсивные функции по-прежнему остаются загадкой для меня. Любая помощь будет высоко ценится. Даже простой псевдо-код, чтобы начать меня. спасибо,

+2

Я подозреваю, что никто не понял смысл описания проблемы. Если вам все еще нужен ответ, не могли бы вы попытаться быть более ясными или опубликовать ссылку на источник? – gboffi

+0

Я не уверен, что такое правильный термин, но как «индексирование вложенного списка», но вместо того, чтобы отметить только глубину элемента, он создает список с номером для каждого списка/подписок. Приведу еще один пример. Кроме того, ссылка на изображение является довольно хорошим описанием того, что такое путь дерева данных. – konrad

+0

Является ли «Кузнечик» в вашей ссылке ссылкой на «Кузнечик АЛГОРИТМНОЕ МОДЕЛИРОВАНИЕ ДЛЯ RHINO» _? Если я прав, возможно, добавление тега 'rhino' в ваши теги может быть действительно полезным? – gboffi

ответ

0

Вы можете попробовать создать класс для общего дерева и иметь различные ветви как дочерние элементы корневого объекта. Скажем, что корневой объект может иметь значение 0, тогда самый левый ребенок будет иметь значение [0,0], следующий ребенок значения [0,1] и т. Д. Если дочерний элемент является вложенным списком, вы можете создать метод, чтобы сделать из него других детей и добавить их в исходный узел в качестве родителя. Вы можете инициализировать класс как нечто подобное и могут работать соответственно,

class GrassTree(): 

    def __init__(self, lst): 
     self.key = "0" 
     self.child = [] 
     for i in lst: 
      self.child.append(i) 

    def getChild(self): 
     for i in range(0, len(self.child)): 
      print(self.child[i]) 

Это только скелетная вещь и идея, что я начал работать с тем чтобы решить этот вопрос. Будет работать над этим дальше. Что касается рекурсии, она появится в изображении, когда вы пытаетесь внедрить классы для вставки детей.

PS: Могли бы дать просто комментарий для этого, но не имели достаточной репутации, чтобы сделать это, таким образом, такой наивный ответ. Простите за это.

+0

Спасибо, что посмотрели на это. Я понятия не имел, с чего начать, так что это здорово. Я посмотрю на это и посмотрю, смогу ли я что-нибудь придумать ... – konrad

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

  • Нет связанных вопросов^_^