2013-03-08 51 views
0

我試圖減少在節點女兒結構中表示的數據文件。的數據格式被表示爲以下:解析Python類的樹和應用語法

({[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. ({網格ABC,GeoNode d},{GeoNode E, GeoNode F},GeoNode G)
  3. ({網格ABC,絲網d},{GeoNode E,GeoNode F},GeoNode G)
  4. (網眼ABCD,{GeoNode E,GeoNode F},GeoNode G)
  5. (網格ABCD,{網格E,網格F},地理節點G)
  6. (網格ABCD,網格EF,地理節點G)
  7. (網眼ABCD,網EF,網格G)
  8. 網ABCDEFG

我目前代表的數據結構爲包含GeoNodes嵌套蟒列表。我能夠以深度優先的方式遍歷樹並打印結構。我不清楚的是當我確定我目前在[網格A,網格B,網格C]時要做什麼。我可以很容易地製作Mesh ABC,但那又如何?我如何確保它與GeoNode D匹配並向上傳播。

這與嘗試評估((1 + 1)+ 2 +(3 + 5))類似,但是也會將每個int轉換爲浮點數。但對於我的情況,我正在處理這些類,而不是浮動和整數。是否有現成的方法可以在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 2013-04-27 07:50:41