<div class="gmail_quote">On Wed, Mar 16, 2011 at 7:32 PM, Shane O&#39;Connor <span dir="ltr">&lt;<a href="mailto:spiderbabymass@gmail.com" target="_blank">spiderbabymass@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


Hi,<div><br></div><div>First-time poster here. I&#39;ve a question about loop efficiency - I was wondering whether this code:</div><div><br></div><div>i = 0</div><div>while i &lt; 1000:</div><div>    do something</div><div>



    i+=1</div><div><br></div><div>is more efficient than:</div><div><br></div><div>for i in range(1000):</div><div>    do something</div><div><br></div><div>or:</div><div><br></div><div><div>
for i in xrange(1000):</div><div>    do something</div></div><div><br></div><div>In my mind, the while loop should not allocate as much memory as range or have the overhead of the iterator of xrange (although aesthetically, I prefer the x/range style). Is this the case or does the compiler do something clever here?</div>



<div><br></div><div>In particular, I&#39;m using Python 2.4.3 on a web server which needs to run as fast as possible using as little memory as possible (no surprises there!). I&#39;m aware that there are more significant optimizations than the above and I will profile the code rather than prematurely optimize loops at the sake of readability/errors but I&#39;m still curious about the answer.</div>


</blockquote><div><br></div><div>Well, I&#39;m not sure about the xrange v while loop, but I&#39;m 100% certain that range is the least efficient of all -  because you both create the iterator *and* a list to iterate over it. My guess is that xrange v while is fairly similar, I do know that the for loop raises/catches a StopIteration under the hood, so there may be some performance issues - I don&#39;t think you&#39;ll get a big gain unless you&#39;re running the loop thousands+ times, but I could be wrong.</div>

<div><br></div><div>HTH,</div><div>Wayne</div>
</div>