<div dir="ltr">On Tue, Jun 11, 2013 at 8:42 AM, Jason Orendorff <span dir="ltr"><<a href="mailto:jason.orendorff@gmail.com" target="_blank">jason.orendorff@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Please look at any Python codebase. The right-hand side of a for loop is most often just an identifier or simple expression naming a collection. You will see a few calls to enumerate(), .items(), and so on, but they do not predominate. Sometimes it's a list literal.<br>
<div class="gmail_extra"><br><div class="gmail_quote"><div>
<br></div><div>I will quantify this later today.<span class=""><font color="#888888"><br></font></span></div><span class=""></span></div></div></div></blockquote><div><br>In case I don't get to this, here is the code you can use:<br>
  <a href="https://gist.github.com/jorendorff/5757221">https://gist.github.com/jorendorff/5757221</a><br><br></div><div>It's easy to run on any Python codebase. In the Python 3.3.1 distribution, for example, only about 12% of for loops require an explicit indication of what kind of iterator is wanted. That is, the default is used about 88% of the time.<br>
<br></div><div>    49.0% - N - just an identifier<br></div><div>    15.0% - R - call to range()<br></div><div>    15.5% - A - an attribute-expression, like self.parts<br></div>    6.4% - I - call to .items() or .iteritems()<br>
    4.2% - L - literal string, tuple, list, or set<br><div>    2.7% - E - call to enumerate()<br>    1.3% - K - call to .keys() or .iterkeys()<br><div>    1.0% - V - call to .values() or .itervalues()<br><div><br>    4.9% - O - everything else<br>
           (examples: module.split('.')[1:], dirs[:], args[1:], fixers[node.type])<br></div><br></div><div>-j<br><br></div></div></div></div></div>