.pop函数清空整个lis

2024-09-27 21:31:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

https://i.stack.imgur.com/J5Sry.png:在pop之前

https://i.stack.imgur.com/G4CrP.png:在pop之后

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()

Tags: nodeforcontentletterlatticenode5node2datasplit
1条回答
网友
1楼 · 发布于 2024-09-27 21:31:04

看起来pop的行为不像您期望的那样,因为您adjacenyList是一个列表列表。当你弹出它看起来像这样[[<Node>, <Node>, <Node]]。弹出第0个元素只会删除所有内容。你知道吗

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

考虑一下您是否真的希望adjacencyList是一个列表列表,还是仅仅是一个节点列表,可能也是一种谨慎的做法。希望这有帮助!你知道吗

相关问题 更多 >

    热门问题