擅长:python、mysql、java
<p>你的循环效率很低。当值不在范围内时,实际上是在徒劳地迭代。你花了很多时间测试指数。你知道吗</p>
<p>不要做一个循环和两个测试。只需创建两个没有索引测试的循环(请注意,如果我们尊重您的测试,则会跳过第一个索引:</p>
<pre><code>for j in range(1,4096):
f.write('0x%05x\t0x%08x\n' %(j, memory[j]))
for j in range(8193,12288):
f.write('0x%05x\t0x%08x\n' %(j, memory[j]))
</code></pre>
<p>可能更具pythonic和更简洁(不使用<code>memory[j]</code>,因此有机会更快):</p>
<pre><code>import itertools
for start,end in ((1,4096),(8193,12288)):
sl = itertools.islice(memory,start,end)
for j,m in enumerate(sl,start):
f.write('0x%05x\t0x%08x\n' %(j, m))
</code></pre>
<p>外部循环保存了2个循环(因此如果有更多偏移,只需将它们添加到元组列表中)。<code>islice</code>对象创建了一个内存片,但没有复制。它每次迭代时不检查数组是否越界,因此<em>可以</em>更快。它还没有被定格,但是写入磁盘可能也要花费很多时间。你知道吗</p>