.pop函数清空整个列表



我正在尝试创建一个晶格结构,检查用户输入的单词是否可以在晶格中形成。邻接列表会遍历并检查其周围的所有节点,以查看下一个用户输入字母是否匹配。在这个特定的例子中,列表包含4个元素,存储为一个节点类,围绕着第二个输入字母"O",但是在尝试弹出刚刚计算的第一个字母后,整个列表被清除。我是不是误解了pop函数的用法?

https://i.stack.imgur.com/J5Sry.png:弹出之前

https://i.stack.imgur.com/G4CrP.png:弹出后

class Node:
def __init__(self, content):
self.content = content

def getInput():
data = str(input("Enter word to search for "))
dataSplit = []
#split input into letters
for letter in data.upper():
dataSplit.append(letter)
return dataSplit

def createLattice():
Node1 = Node("M")
Node2 = Node("H")
Node3 = Node("E")
Node4 = Node("N")
Node5 = Node("O")
Node6 = Node("P")
Node7 = Node("A")
Node8 = Node("C")
Node9 = Node("M")
Node10 = Node("O")
Node11 = Node("R")
Node12 = Node("E")
Node13 = Node("T")
Node14 = Node("D")
Node15 = Node("E")
Node16 = Node("T")
Node17 = Node("I")
Node18 = Node("C")
lattice = {Node1: [Node2, Node6, Node7],
Node2: [Node1, Node3, Node5, Node8],
Node3: [Node2, Node4, Node9],
Node4: [Node3, Node5, Node10],
Node5: [Node2, Node4, Node6, Node11],
Node6: [Node5, Node1, Node12],
Node7: [Node1, Node8, Node12, Node13],
Node8: [Node2, Node7, Node9, Node12, Node14],
Node9: [Node3, Node8, Node10, Node15],
Node10: [Node4, Node9, Node11, Node16],
Node11: [Node5, Node8, Node10, Node12, Node17],
Node12: [Node6, Node7, Node11, Node18],
Node13: [Node7, Node14, Node18],
Node14: [Node8, Node13, Node15, Node17],
Node15: [Node9, Node14, Node16],
Node16: [Node10, Node15, Node17],
Node17: [Node11, Node14, Node16, Node18],
Node18: [Node12, Node13, Node17]}

return lattice

def searchLattice(dataSplit, lattice):
storeLetter = []
adjacencyList = []
firstLetter = dataSplit[0]
for letter in dataSplit:
for elem in adjacencyList:
for node in elem:
if node.content == letter:
storeLetter.append(letter)
adjacencyList.clear()
break
elif node.content != letter:
adjacencyList.pop(0)
print(adjacencyList)
for key in lattice:
if letter == key.content:
storeLetter.append(letter)
adjacencyList.append(lattice[key])




def main():
dataSplit = getInput()
(lattice) = createLattice()
searchLattice(dataSplit, lattice)
main()

似乎pop没有按照您预期的方式运行的原因是因为adjacenyList是一个列表列表。当你弹出时,它看起来像这个[[<Node>, <Node>, <Node]]。弹出其中的第0个元素只会删除所有内容。

我不完全确定这是否会产生您想要的最终输出,,但如果您将行adjacencyList.pop(0)替换为adjacencyList[0].pop(0)则可以防止该错误

考虑一下您是否真的希望adjacencyList是一个列表列表,或者仅仅是一个节点列表,也可能是谨慎的。希望这能有所帮助!

最新更新