自從昨天以來,我陷入了一個小而棘手的問題。Python - 迭代嵌套列表
我所擁有的是一個(可能無限)嵌套表是這樣的:
[1,[2,[3,4]]]
or [[1,2],[3,4]] and so on.
每個級別上的列表包括兩個子表,(我沒有使用元組,因爲該名單可能會得到任意長度在下一步中) 現在我想在此列表中的每個可能位置插入一個元素,並返回所有可能插入位置列表的列表。 所以,如果我插入5,我的輸出應該是這樣的:
[ [5,[1,[2,[3,4]]]],
[1,[5,[2,[3,4]]]],
[1,[2,[5,[3,4]]]],
[1,[2,[[3,5],4]]],
[1,[2,[3,[4,5]]]] ]
背景:我試圖通過在每次添加一個類羣來構建系統發育樹。每個分類單位必須插入最合適的位置。
我現在得到的是:
def get_trees(nwklist,newid):
if not isinstance(nwklist,list):
return [newid,nwklist]
else:
return [newid,nwklist],[get_trees(nwklist[0],newid),nwklist[1]],[nwklist[0],get_trees(nwklist[1],newid)]
不產生我想要的輸出,但說到有點接近。
([5, [1, [2, [3, 4]]]],
[[5, 1], [2, [3, 4]]],
[1, ([5, [2, [3, 4]]], [[5, 2], [3, 4]], [2, ([5, [3, 4]], [[5, 3], 4], [3, [5, 4]])])])
應該有一個簡單的解決方案,可能涉及lambda函數,但我只是沒有看到它。
克里斯托夫
你幾乎肯定會重新發明輪子。 Python中有處理進化樹的軟件包,比如Biopython的Phylo(http://www.biopython.org/wiki/Phylo)或dendropy(http://pypi.python.org/pypi/DendroPy) –
只是挑剔的:你的列表可能具有*任意*深度,但不具有*無限*深度。至少,我不知道如何。 –
「每個分類單位必須插入最合適的位置。」這聽起來像試圖構建一個鄰居加入樹,這是一個不好的計劃。查找更多關於如何最好地構建系統發育樹的文獻,以及爲什麼最簡單的方法也是最差的。 – pyvi