<p>既不需要<code>templist</code>也不需要<code>answerlist</code>。让我们检查一下代码,看看如何消除它们。在</p>
<ol>
<li><p>首先,让我们将<code>templist</code>的初始化设置为一行代码。这个:</p>
<pre><code>templist = []
for y in range (x,x + length):
templist.append(y)
</code></pre>
<p>变成这样:</p>
<pre><code>templist = list(range(x, x + length))
</code></pre></li>
<li><p>那么让我们对<code>answerlist</code>执行相同的操作。这个:</p>
<pre><code>for d in range (0,lengthmodified):
answerlist.append(templist[d])
</code></pre>
<p>变成这样:</p>
<pre><code>answerlist.extend(templist[:lengthmodified])
</code></pre></li>
<li><p>现在让我们来看看它们是如何被使用的。如果我们暂时忽略<code>lengthmodified -= 1</code>和<code>x += length</code>,我们有:</p>
<pre><code>templist = list(range(x, x + length))
answerlist.extend(templist[:lengthmodified])
for n in answerlist:
prestringresult ^= n
answerlist = []
</code></pre>
<p>与其扩展<code>answerlist</code>,迭代它,然后清除它,只迭代<code>templist</code>会更快。在</p>
<pre><code>templist = list(range(x, x + length))
for n in templist[:lengthmodified]:
prestringresult ^= n
</code></pre>
<p>现在也不需要<code>templist</code>,所以让我们跳过构建它。在</p>
<pre><code>for n in range(x, x + lengthmodified):
prestringresult ^= n
</code></pre>
<p><code>templist</code>和{<cd2>}都不见了。</p></li>
</ol>
<p>这里唯一缺少的是<code>answerlist.append(int(stringresult))</code>返回。我把这个留给你想办法。在</p>
<p>总的来说,这里的教训是尽可能避免显式的<code>for</code>循环。编写大量迭代容器的<code>for</code>循环是一种C思维方式。在Python中,经常有一些方法可以一次完整地分析集合。这样做可以利用语言的快速内置操作。在</p>
<p>另外,惯用Python也很容易阅读。在</p>