2013-03-08 4 views
0

Я пытаюсь уменьшить файл данных, который представлен в структуре node-child. Формат данных представлена ​​в следующем виде:Разбор дерева классов python и применение грамматики

({[GeoNode А, GeoNode В, GeoNode С], GeoNode D}, {GeoNode Е, GeoNode Р}, GeoNode G)

Где GeoNode является Python объект. Я пытаюсь применить две операции в некоторой схеме, которая пройдет по дереву. Первый преобразует все GeoNodes в текущем «уровне» в сетки. Второй объединит сетки вместе, в конце оставит меня с одной сеткой.

Вот как выглядят шаги в приведенном выше примере.

  1. ({[Сетка А, сетка B, сетка С], GeoNode D}, {GeoNode Е, GeoNode Р}, GeoNode G)
  2. ({Mesh ABC, GeoNode D}, {GeoNode E, GeoNode F}, GeoNode G)
  3. ({Mesh ABC, сетки D}, {GeoNode E, GeoNode F}, GeoNode G)
  4. (сетка ABCD, {GeoNode Е, GeoNode Р}, GeoNode G)
  5. (Mesh ABCD, {Mesh E, Mesh F}, GeoNode G)
  6. (Mesh ABCD, Mesh EF, GeoNode G)
  7. (сетка ABCD, сетка EF, сетки G)
  8. сетка АБВГДЕЖ

я в настоящее время представляет собой структуру данных, как вложенные списки питона, содержащих GeoNodes. Я могу пересечь дерево в глубину и напечатать структуру. Мне непонятно, что делать, когда я решил, что я нахожусь в [Mesh A, Mesh B, Mesh C]. Я могу легко сделать Mesh ABC, но что тогда? Как я могу обеспечить, чтобы это соответствовало GeoNode D и распространялось вверх.

Это похоже на попытку оценить ((1 + 1) + 2 + (3 + 5)), но также преобразует каждый int в float. Однако для моего случая я имею дело с этими классами, а не с плавающей точкой и ints. Существуют ли существующие способы сделать это в Python или в независимых от языка примерах?

ответ

0

Вы должны работать снизу вверх, используя функцию рекурсивного преобразования.

def transform(s): 
    ''' Receives a GeoNode structure as nested lists and returns a Mesh. 
    ''' 
    if isinstance(s, list): 
     return merge_meshes([transform(e) for e in s]) 
    else: 
     assert isinstance(s, GeoNode) 
     return geonode_to_mesh(s) 
+0

Поздний отклик, но этот подход был полезен и как я решил проблему. – saboot

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