为什么我的布尔值在 while 循环中没有变化?

Why doesn't the value of my boolean change in a while-loop?

我的算法书在 Python 上用不同的方法实现了链表。这是remove方法,但我不完全理解while循环。

这个实现依赖于之前定义的Nodeclass,class有get.data()get.next()、[=16等方法=],等等。列表本身是一个名为 UnorderedList 的 class。 self.head 指的是列表中的第一项。

这个 remove 方法的思想是遍历列表,直到找到要删除的项目。我们创建一个 current 和一个 previous 来跟踪我们正在查看的当前项目和之前的项目。

我的问题与 while 循环有关。我们将 found 设置为 False,目的是在找到要查找的项目时更改它。但是,当我们说 not found 时,while 循环不会将 found 的值更改为 True 吗?

我知道这是一个简单的问题,但我很难理解这个 while 循环为什么以及如何工作,因为在我的脑海中 not 通常使布尔值在其范围内与其本身相反。谁能给我解释一下?

顺便说一句,我不需要对当前代码做任何解释或改进,这是书中的一个例子,对我来说都很有意义,我只是想了解那部分。

def remove(self, item):
 current = self.head
 previous = None
 found = False
 while not found:
      if current.get_data() == item:
           found = True
      else:
           previous = current
           current = current.get_next()

 if previous == None:
      self.head = current.get_next()
 else:
      previous.set_next(current.get_next())

not found在while循环中用作条件,而不是用作改变值的语句。您可以将 while not found 读作 while found == False

所以我好像漏掉了 while-loop 试图做的事情的一部分。事实上,说 not found 意味着表达式的计算结果为 True,但在这种情况下不会停止循环。它做的正是我们想要的,它继续 运行 循环。找到要查找的项目后,我们将 found 的值更改为 True。那时,当我们评估 while not found 时,它将产生 False,这将使我们脱离循环。