I&#x27;ve written a fair share of Haskell, and I still get tripped up by list comprehensions in python - even my own.  It&#x27;s not that it&#x27;s impossible to understand, and when there&#x27;s only one predicate, I think it&#x27;s fine:<p><pre><code>  for row in [[i*j for i in range(1, 8)] for j in some_list if j % 2 == 0]:
    some_op(row)
</code></pre>
vs<p><pre><code>  for j in some_list:
    if j % 2 == 0:
      row = [ i * j for i in range(1,8) ]
      some_op(row)
</code></pre>
I would compare it to sentences and paragraphs.  The former feels like a run-on sentence, while the latter is more obvious, cause it has one predicate per line.  Also, list comprehensions are a bit like yoda-speak - it introduces the verb before the subject.  You have to untangle the order of operations, rather than having the order read top-down and left-right.<p>Of course, I&#x27;m a rubyist, so I&#x27;d prefer:<p><pre><code>  some_list.select { |j|   j % 2 == 0 }
           .map    { |j|   (1..8).map { |i| i * j } }
           .map    { |row| some_op(row) }
</code></pre>
Though definitely need to do something about that second line.<p>Haskell list comprehensions are a bit easier to parse because they have symbolic delimiters, the fact that Haskell is naturally more terse, and because you can always check the type of the list<p><pre><code>  [ [i*j | i &lt;-[1..8]] | j &lt;- [1..4], j % 2 == 0 ]</code></pre>