如何使用python包ete2使用存储在列表中的字符串创建树?

2024-05-17 02:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python包ete2从我的一个元胞自动机模型输出的合成数据制作一个系统发育树。数据由列为(父项,子项)的对组成,其中每一对成员都是一个表示突变事件的唯一整数。我已经将这对中的每个成员都重铸为字符串,并在它们前面加上“r”,所以现在:

('r1','r2')将表示一个名为'r1'的父代,从而产生一个名为'r2'的子代。因此输出文件如下所示:

[['r1' 'r2']
 ['r1' 'r3']
 ['r1' 'r4']
 ['r1' 'r5']
 ['r1' 'r6']
 ['r1' 'r7']
 ['r1' 'r8']
 ['r1' 'r9']
 ['r2' 'r10']
 ['r1' 'r11']
 ['r1' 'r12']
 ['r8' 'r13']
 ['r1' 'r14']
 ['r4' 'r15']
 ['r1' 'r16']
 ['r1' 'r17']
 ['r1' 'r18']
 ['r1' 'r19']]

我想迭代列表,使用'add_nuchild'创建树,但总是出错。我目前的代码是:

^{pr2}$

我得到了一个错误:

Traceback (most recent call last):
  File "treetest.py", line 33, in <module>
    a = b.add_child(name = a)
AttributeError: 'str' object has no attribute 'add_child'

如果我用r1(或其他东西)替换最后一行代码中的'b',它就可以找到,但当然,这并不代表数据。。。先谢谢你,宇宙。在


Tags: 数据代码模型addchild自动机元胞成员
1条回答
网友
1楼 · 发布于 2024-05-17 02:35:19

像这样:

t = Tree() # Creates an empty tree
r1 = t.add_child(name="r1")
lookup = {"r1": r1}

def sort_pairs(pair):
    # Extract integer after "r".
    return int(pair[0][1:])

for pair in sorted(pairs_list, key=sort_pairs):
    parentname = pair[0]
    childname = pair[1]
    if childname not in lookup:
        if parentname in lookup:
            # Add child.
            newchild = lookup[parentname].add_child(name = childname)
            lookup.add(childname, newchild)
        else:
            raise RuntimeError('Must not happen.')

相关问题 更多 >