我通过将节点放在列表中来创建图表。 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]
使用'匹配'对我来说似乎不优雅。是否有更好的语法来检查女儿之间是否存在边缘,如果存在,则将当前节点更新为该子节点,如果不存在,则创建该节点?
答案 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
。