Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python For…循环迭代_Python_String_List_Loops - Fatal编程技术网

Python For…循环迭代

Python For…循环迭代,python,string,list,loops,Python,String,List,Loops,好,, 我有这个程序以Newick格式对代码进行稀疏处理,它提取了一个名称和一个距离,用于系统发育树图。 我的问题是,在这段代码中,当程序读取newickNode函数时,它将名称和距离分配给“node”变量,然后将其返回到要打印的“node”类中,但它似乎只打印第一个节点“A”,而跳过其他3个。 是否需要在newickNode中完成for循环以读取其他3个节点,并使用第一个节点相应地打印它们 class Node: def __init__(self, name, distance, p

好,, 我有这个程序以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()
谢谢

您的
newickNode()
函数应该累积节点列表并返回该列表,而不是返回创建的第一个节点。如果要这样做,为什么要从循环开始

def newickNodes(newickString, parent=None):
    nodes = []
    for node in newickString[1:-1].split(','):
        nodeName, nodeDistance = node.split(':')
        nodes.append(Node(nodeName, nodeDistance, parent))
    return nodes
或者,您可以将其编写为生成器,一次生成一个节点。这将允许您轻松地迭代它们或根据需要将它们转换为列表

def newickNodes(newickString, parent=None):
    for node in newickString[1:-1].split(','):
        nodeName, nodeDistance = node.split(':')
        yield Node(nodeName, nodeDistance, parent)
此外,从面向对象的设计角度来看,这可能是名为
parseNewickString()
或类似名称的
节点上的类方法。

您的
newickNode()
函数应该累积节点列表并返回该列表,而不是返回创建的第一个节点。如果要这样做,为什么要从循环开始

def newickNodes(newickString, parent=None):
    nodes = []
    for node in newickString[1:-1].split(','):
        nodeName, nodeDistance = node.split(':')
        nodes.append(Node(nodeName, nodeDistance, parent))
    return nodes
或者,您可以将其编写为生成器,一次生成一个节点。这将允许您轻松地迭代它们或根据需要将它们转换为列表

def newickNodes(newickString, parent=None):
    for node in newickString[1:-1].split(','):
        nodeName, nodeDistance = node.split(':')
        yield Node(nodeName, nodeDistance, parent)

此外,从面向对象的设计角度来看,这可能是
节点上名为
parseNewickString()
或类似类的
类的类方法。

第一次通过
for:
循环时,您
返回一个节点,该节点停止函数的执行

如果要返回节点列表,请在函数顶部创建该列表,每次通过循环追加到该列表,完成后返回该列表


将循环移到
newickNode
函数之外,并让该函数按照其名称仅返回一个节点可能更有意义。

第一次通过
for:
循环时,您
返回一个节点,该节点停止函数的执行

如果要返回节点列表,请在函数顶部创建该列表,每次通过循环追加到该列表,完成后返回该列表


将循环移到
newickNode
函数之外,并让该函数按照其名称仅返回单个节点可能更有意义。

或者,您的
newickNode()
函数可以在每次通过循环时立即调用新节点上的
node.displayNode()
,每次通过循环时,您的
newickNode()
函数都可以立即调用新节点上的
node.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

你可以把它做成发电机:

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

为了保持这种灵活性,我会使用
pyparsing
来处理Newick文本和
networkx
,这样我就拥有了我想要的所有图形功能-建议
easy\u install
/
pip
这些模块。另外,有人已经编写了一个包含节点和树创建的解析器,这也很好(尽管它看起来缺少一些功能,但它适用于您的情况):


为了保持更灵活,我会使用
pyparsing
来处理Newick文本和
networkx
,这样我就拥有了我想要的所有图形功能-建议
easy\u install
/
pip
这些模块。另外,有人已经编写了一个包含节点和树创建的解析器,这也很好(尽管它看起来缺少一些功能,但它适用于您的情况):


哇,谢谢你,idk为什么我以前没有看到,我的代码非常简单,可以使用另一个func分解和解析字符串。我的代码中有。哇,谢谢你,idk为什么我以前没有看到,我的代码非常简单,我可以使用另一个func分解和解析字符串。我的密码里有。