Skip to main content
 首页 » 编程设计

Python For...循环迭代

2025年05月04日11zlslch

好的, 我有这个程序以 Newick 格式稀疏代码,它提取名称和距离以用于系统发育 TreeMap 中。 我的问题是,在这个代码分支中,当程序读取 newickNode 函数时,它将名称和距离分配给“节点”变量,然后将其返回到要打印的“节点”类中,但似乎只打印第一个节点“A”,并跳过其他 3 个。
无论如何要完成 newickNode 中的 for 循环以读取其他 3 个节点并相应地打印它们与第一个节点?

class Node: 
    def __init__(self, name, distance, parent=None): 
        self.name = name 
        self.distance = distance 
        self.children = []   
        self.parent = parent 
 
    def displayNode(self): 
        print "Name:",self.name,",Distance:",self.distance,",Children:",self.children,",Parent:",self.parent 
 
def newickNode(newickString, parent=None): 
    String = newickString[1:-1].split(',') 
    for x in String: 
        splitString = x.split(':') 
        nodeName = splitString[0] 
        nodeDistance = float(splitString[1])  
        node = Node(nodeName, nodeDistance, parent) 
        return node 
 
Node1 = newickNode('(A:0.1,B:0.2,C:0.3,D:0.4)') 
Node1.displayNode() 

谢谢!

请您参考如下方法:

你可以把它变成一个生成器:

def newickNode(newickString, parent=None): 
    String = newickString[1:-1].split(',') 
    for x in String: 
        splitString = x.split(':') 
        nodeName = splitString[0] 
        nodeDistance = float(splitString[1])  
        node = Node(nodeName, nodeDistance, parent) 
        yield node 
 
for node in newickNode('(A:0.1,B:0.2,C:0.3,D:0.4)'):  
    node.displayNode() 

生成器将一次返回一个节点并在函数内暂停,然后在您需要下一个节点时恢复。

或者把它们保存起来然后归还

def newickNode(newickString, parent=None): 
    String = newickString[1:-1].split(',') 
    nodes = [] 
    for x in String: 
        splitString = x.split(':') 
        nodeName = splitString[0] 
        nodeDistance = float(splitString[1])  
        node = Node(nodeName, nodeDistance, parent) 
        nodes.append(node) 
    return nodes