这段代码有Python函数吗?

时间:2015-07-17 15:57:32

标签: python graph

我通过将节点放在列表中来创建图表。 Node是一个具有属性“parent”,“daughters”和“edge”的类。我想检查一个符号是否在当前节点的任何子节点的边缘,如果是,则将当前节点更改为该节点。如果没有,那么我用该边创建一个新节点,并将当前节点更改为它。

我是这样做的:

match = False
for daughter in currentNode.daughters:
    if daughter.edge == currentSymbol:
        match = True
        currentNode = daughter
if match == False:
    trie.append(node(currentNode, [], currentSymbol)
    currentNode = trie[-1]

使用'匹配'对我来说似乎不优雅。是否有更好的语法来检查女儿之间是否存在边缘,如果存在,则将当前节点更新为该子节点,如果不存在,则创建该节点?

2 个答案:

答案 0 :(得分:4)

您可以在此处使用for/else

for daughter in currentNode.daughters:
    if daughter.edge == currentSymbol:
        currentNode = daughter
        break
else:
    trie.append(node(currentNode, [], currentSymbol)
    currentNode = trie[-1]

如果else循环正常退出,即没有for

,则会执行break个案

答案 1 :(得分:3)

您可以在此处使用for...else语法:

for daughter in currentNode.daughters:
    if daughter.edge == currentSymbol:
        currentNode = daughter
        break
else:
    trie.append(node(currentNode, [], currentSymbol)
    currentNode = trie[-1]

仅当for循环正常完成而没有破坏时,else部分才会执行。因此,在您的情况下,如果找到匹配项,则会从循环中断(中止),并跳过else。如果你没有找到匹配项,那么你永远不会从循环中断开,并执行else