我的树构建工具喜欢二叉树。为了获得这样的树,它通常会引入超小的分支以将其保持在二进制结构中。
当我尝试比较树木时,这对我来说非常烦人,因为那些小树枝会引入不应该存在的分裂。
如果分支长度小于指定限制,是否有使用 ete3(或其他一些库)清理分支树的简单方法?
例如,让从根到 AB 的分支长度小于限制:
/-A
/-|
| \-B
--|
| /-C
\---|
\-D
那么生成的树应该是这样的:
/-A
|
|--B
--|
| /-C
\---|
\-D
我试过这样:
from ete3 import Tree
tree = "((A:0.1,B:0.2):0.005,(C:0.3,D:0.4):0.009);"
t1 = Tree(tree, quoted_node_names=True, format=1)
limit = 0.006
for node in t1.iter_descendants():
if node.dist <= limit:
nn = node._children
nodelist = []
for n in nn:
nodelist.append(n.name)
for n in nodelist:
parent = node.up
remove = t1.search_nodes(name=n)
remove[0].delete()
# parent._children.append(remove)
print(t1)
导致这棵树:
/-C
-- /---|
\-D
所以我设法切断了 A 和 B 叶子 - 但我未能将它们连接到上节点。
这是实现这一目标的有效策略吗?
如果没有,我应该如何解决这个问题?
非常感谢你,
最好的,
吨。