Python For ...循环迭代

Sea*_*ean 1 python string loops list

好吧,我有这个程序以Newick格式稀疏代码,它提取一个名称,以及在系统发生树图中使用的距离.我的问题是,在这个代码分支中,当程序通过newickNode函数读取时,它将名称和距离分配给'node'变量,然后将其返回到'Node'类中进行打印,但似乎只打印第一个节点'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()
Run Code Online (Sandbox Code Playgroud)

谢谢!

jdi*_*jdi 5

你可以把它变成一个发电机:

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()
Run Code Online (Sandbox Code Playgroud)

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

或者只是保存它们并返回它们

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
Run Code Online (Sandbox Code Playgroud)