Class 从函数传递的Python3对象

Class 从函数传递的Python3对象,class,object,python-3.x,linked-list,Class,Object,Python 3.x,Linked List,下面的代码片段用于删除链表中的节点。我的类包含两个成员,即data和next一个指针,用于保存该类类型的其他对象。当我运行我的程序时,我没有得到任何错误。如果我试图删除链表中的第一项,它将进入第一个for循环,并显示消息“数据已找到”。但是如果我打印列表,我会看到列表中的元素。我认为这是因为重新分配了对象,但我无法找到我在哪里犯了这个错误。非常感谢您的帮助 def deleteNode(self, a_data): flag = 0 if (self.data

下面的代码片段用于删除链表中的节点。我的类包含两个成员,即
data
next
一个指针,用于保存该类类型的其他对象。当我运行我的程序时,我没有得到任何错误。如果我试图删除链表中的第一项,它将进入第一个for循环,并显示消息“数据已找到”。但是如果我打印列表,我会看到列表中的元素。我认为这是因为重新分配了对象,但我无法找到我在哪里犯了这个错误。非常感谢您的帮助

def deleteNode(self, a_data):
        flag = 0


        if (self.data == a_data):
            print("The data is found")
            self = self.next
            flag = 1

        else:

            while(self.next != None):

                if (self.next.data == a_data):

                    self.next = self.next.next
                    flag = 1
                    break

                else:

                    self = self.next

        if(flag):
            print("Data Deleted")
        else:
            print("Data not available")
谢谢

朋友们

我修改了我的函数。我认为错误可能是因为没有将值赋回原始值,所以我使用函数返回值。除了我的意见和其他方法以及任何其他原因之外,我们都非常欢迎

def deleteNode(self, a_data):
        flag = 0


        if (self.data == a_data):
            print("The data is found")
            self = self.next
            flag = 1

        else:

            while(self.next != None):

                if (self.next.data == a_data):

                    self.next = self.next.next
                    flag = 1
                    break

                else:

                    self = self.next

        if(flag):
            print("Data Deleted")
        else:
            print("Data not available")

        return self
谢谢
S

self=self。代码中的下一个
对外部世界没有影响:它只分配给局部变量

看起来您正试图从节点类本身中删除节点。您可以使用一个函数,该函数接受列表头并返回一个(可能是新的)列表头,同时删除相应的项:

def delete_node(head, data):
    """Delete the first node in the `head` list that has `data`."""
    prev, node = None, head
    while node is not None: # until the last node (`None` means empty list)
        if node.data == data: # found node that has data
           if prev is None: # we are at the very beginning of the list
              assert head is node
              head = node.next # remove the first node
           else:
              assert prev.next is node
              prev.next = node.next # remove internal node
           break
        prev, node = node, node.next
    return head

我猜您将列表分配给一个变量,然后用函数修改它,然后再查看它。如果是这样,我可以提供一个答案。@IchUndNichtDu谢谢你的回复。我修改了我的函数以返回引用本身。这是我的建议。您需要将函数的返回值赋回变量是正确的。但正如J.F.塞巴斯蒂安在他的回答中指出的那样,给自己分配一些别的东西并不意味着什么。因为这只影响函数的名称空间。@IchUndNichtDu Yeah从中吸取了教训。谢谢