0

我正在尝试减少以节点女儿结构表示的数据文件。数据格式表示如下:

( { [ GeoNode A, GeoNode B, GeoNode C ], GeoNode D }, { GeoNode E, GeoNode F }, GeoNode G )

其中 GeoNode 是一个 python 对象。我正在尝试在将遍历树的某个方案中应用两个操作。第一个会将当前“级别”中的所有 GeoNode 转换为网格。第二个将网格合并在一起,最后留下一个网格。

以下是上述示例中的步骤。

  1. ({[网格A,网格B,网格C],GeoNode D},{GeoNode E,GeoNode F},GeoNode G)
  2. ( { Mesh ABC, GeoNode D }, { GeoNode E, GeoNode F }, GeoNode G )
  3. ({网格ABC,网格D},{地理节点E,地理节点F},地理节点G)
  4. (网格 ABCD, { GeoNode E, GeoNode F }, GeoNode G )
  5. (网格 ABCD,{ 网格 E,网格 F},GeoNode G)
  6. (网格 ABCD、网格 EF、GeoNode G)
  7. (网格 ABCD、网格 EF、网格 G)
  8. 网格 ABCDEFG

我目前将数据结构表示为包含 GeoNode 的嵌套 python 列表。我能够以深度优先的方式遍历树并打印结构。当我确定我目前在 [Mesh A, Mesh B, Mesh C] 时,我不清楚该怎么做。我可以轻松制作 Mesh ABC,但那又如何呢?如何确保它与 GeoNode D 匹配并向上传播。

这类似于尝试评估 ( ( 1 + 1 ) + 2 + ( 3 + 5 ) ),但也将每个 int 转换为浮点数。但是,就我而言,我正在处理这些类,而不是浮点数和整数。是否有现有的方法可以在 Python 或独立于语言的示例中执行此操作?

4

1 回答 1

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)
于 2013-03-09T18:52:56.073 回答