我在列表清單中有一個樹狀結構。我想把它弄平。平展可重複樹
[[[[2, 1], [1, 2]], [[1, 2], [2, 1]]], [[[1, 2], [2, 1]], [[2, 1], [1, 2]]]]
下面是規則中,在最低水平兩個二項列表被合併在這樣一種方式,即在兩個 列表之間共享的中間數壓扁/接合是這樣的:
[2, 1], [1, 2] => 212
[1, 2], [2, 1] => 121
這將導致四到三個元素列表。在這第二個操作中,兩個列表之間的中間2個數字被壓扁。
212 121 , 121 212 => 2121 , 1212 => 21212
在接下來的步驟中,中間的3個數字被壓扁/連接...等等以相同的方式。
順便說一句,你不需要做任何檢查,它是保證中號總是重複即匹配。
每個較高級別都會在整個序列中增加一個新數字。 也可以使用任何數字,這裏我們只使用1和2來簡化。
任何想法。
如果您在python中有解決方案,但也歡迎其他語言。 但總的來說,我正在尋找這個想法。還在測試它,但這似乎做的工作:
def squash(self, lst1, lst2):
return lst1 + [lst2[-1]]
def unroll(self, lol):
print lol
if isinstance(lol[0], int) : return lol
if isinstance(lol[0][0], int) : return self.squash(lol[0], lol[1])
rv = [ self.unroll(lol[0]) , self.unroll(lol[1]) ]
return self.unroll(rv)
任何簡單化的歡迎...
LoL?列表清單?不要使用自己的縮寫。這不是推特,沒有文字限制。另外,深度總是一樣的?然後它似乎不像你需要遞歸。 –
深度可能會有所不同.. – user1019129