Coming from Ruby to Python...I could not believe how damn hard it was to comprehend the beautifully explained and simple code (just 21 lines!) in Peter Norvig&#x27;s writeup of how to create a spelling corrector [1], purely because of the list comprehensions (and a few other visual differences, such as partial list notation)<p>For example:<p><pre><code>     inserts = [a + c + b for a, b in splits for c in alphabet]
</code></pre>
It&#x27;s no different (conceptually, at least) than doing:<p><pre><code>     inserts = []
     for a, b in splits:
        for c in alphabet:
            inserts.append(a + c + b)
</code></pre>
Or in Ruby (OK, maybe this isn&#x27;t perfect Ruby):<p><pre><code>     inserts = splits.reduce([]) do |x, (a, b)|
         alphabet.each{|c| x &lt;&lt; a + c + b }
         x
     end
  
</code></pre>
But the list comprehension was so difficult for me to read that it might as well have been a brand new concept. But I found I got quickly over it after rewriting all of his comprehensions as for-loops, and then trying to convert them back into comprehensions. It was a good reminder that sometimes the barrier is just plain muscle&#x2F;memory reflex (and probably much more so for beginning programmers...)<p>[1] <a href="http:&#x2F;&#x2F;norvig.com&#x2F;spell-correct.html" rel="nofollow">http:&#x2F;&#x2F;norvig.com&#x2F;spell-correct.html</a>