Python For…循环迭代
好,, 我有这个程序以Newick格式对代码进行稀疏处理,它提取了一个名称和一个距离,用于系统发育树图。 我的问题是,在这段代码中,当程序读取newickNode函数时,它将名称和距离分配给“node”变量,然后将其返回到要打印的“node”类中,但它似乎只打印第一个节点“A”,而跳过其他3个。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
是否需要在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分解和解析字符串。我的密码里有。