<p>此处:</p>
<pre><code>curstring = [0]
longest = [0]
</code></pre>
<p>您正在创建两个列表,其中一个元素是整数(0)。你知道吗</p>
<p>稍后,这里:</p>
<pre><code>if s[i] >= str(curstring[-1]):
</code></pre>
<p>您正在检查给定字母的值是否高于列表中的最后一个元素。由于Python是<a href="https://en.wikipedia.org/wiki/Zero-based_numbering" rel="nofollow noreferrer">zero-based</a>,所以从字母“o”开始(因为它有索引1,它恰好是范围列表中的第一个索引)。你知道吗</p>
<pre><code>for i in range(1,len(s)):
</code></pre>
<p>Char(letter)比较基于<a href="https://en.wikipedia.org/wiki/ASCII#Printable_characters" rel="nofollow noreferrer">ASCII table</a>,因此任何给定的字母都有一个大于0的“更高的值”('o'是111)。你知道吗</p>
<p>因为第二个代码块中的条件为真,所以字母“o”被添加到此块中的列表中:</p>
<pre><code>curstring+= s[i]
</code></pre>
<p>之后,list<em>curstring</em>上有两个元素:0和'o'。你知道吗</p>
<pre><code>if len(curstring) > len(longest):
</code></pre>
<p>这里您将比较<em>curstring</em>(如上所述)和<em>longest</em>,后者是一个包含一个元素的列表:0(正如您在上面描述的第一个代码块中创建了包含一个元素的列表)。条件为true(2个元素多于一个元素),因此<em>longest</em>now<a href="https://en.wikipedia.org/wiki/Pointer_(computer_programming)" rel="nofollow noreferrer">points</a>与<em>curstring</em>位于同一列表中,因此有两个元素(长度=2)。你知道吗</p>
<p>稍后,正如您在提供的visualiser中看到的那样,<em>curstring</em>引用变量并不指向列表。它的类型在执行此行时更改:</p>
<pre><code>curstring = s[i]
</code></pre>
<p>所以稍后,当一个字符被添加时,当15。执行步骤时,结果是一个两个字母的字符串“dw”。将该字符串与具有两个元素的list<em>longest</em>进行比较(如上所述)。字符串“dw”的长度为2,列表的长度为2,这就是为什么条件为false。你知道吗</p>
<p>您应该阅读一些关于Python中的类型以及如何在代码中创建和维护变量的知识—这将帮助您发现这些小错误。请记住,Python在列表中的语法与C++、java等语言不同,我假设你已经编写了代码</p>
<pre><code>curstring = [0]
longest = [0]
</code></pre>
<p>基于对其他语言数组/列表的经验。Python中的空列表是这样创建的:</p>
<pre><code>new_list = []
</code></pre>