擅长:python、mysql、java
<blockquote>
<p>[..] so calling <code>append</code> each time seems like it might be causing memory fragmentation, or performance problems, but I am also wondering if that is just my old C ways tripping me up. </p>
</blockquote>
<p>如果您担心这个问题,请不要这样做。当需要重新调整列表的大小时(列表根据其大小动态调整大小),Python会过度分配,以便执行<code>O(1)</code>追加。无论是手动调用<code>list.append</code>,还是使用列表理解构建它(它在内部也使用<code>.append</code>),记忆方面的效果都是相似的。你知道吗</p>
<p>列表理解的性能(速度方面)要好一点;它是为创建带有专门字节码指令的列表而优化的,这些指令可以帮助它(<code>LIST_APPEND</code>主要是<em>直接</em>调用lists append in <code>C</code>)。你知道吗</p>
<p>当然,如果内存使用是个问题,您可以选择chepners答案中突出显示的生成器方法来懒散地生成结果。你知道吗</p>
<hr/>
<p>最后,<code>for</code>循环仍然很棒。与理解和<code>map</code>相比,它们可能显得笨拙,但它们仍然提供了一种可识别和可读的方式来实现目标。<code>for</code>环路也值得我们的爱。你知道吗</p>