擅长:python、mysql、java
<pre><code>for i in mylist:
mylist.append(i.upper())
</code></pre>
<p>基本上是在迭代时附加到列表中。所以迭代永远不会结束。你知道吗</p>
<p>你想做:</p>
<pre><code>mylist += [i.upper() for i in mylist]
</code></pre>
<p>在最后一种情况下,从未修改的<code>mylist</code>计算右侧表达式,然后将其元素附加到现有的<code>mylist</code>。你知道吗</p>
<p>请注意,以上等同于</p>
<pre><code>mylist.extend([i.upper() for i in mylist])
</code></pre>
<p>或者</p>
<pre><code>mylist.extend(list(map(str.upper,mylist)))
</code></pre>
<p>请注意,对于上面的两个代码段,有必要将其转换为<code>list</code>,否则,如果延迟计算内部代码,则会得到相同的内存错误。最后一个代码段可能是最快的,因为它根本不使用任何python循环,<code>map</code>,也不使用<code>lambda</code></p>
<p>对于所有3个代码段,结果是:</p>
<pre><code>['phonon', 'communication', 'PHONON', 'COMMUNICATION']
</code></pre>