Explanation of this Python language feature? [x for x in x for x in x] (to flatten a nested list)
Rustom Mody
rustompmody at gmail.com
Fri Mar 21 22:06:06 EDT 2014
On Saturday, March 22, 2014 3:00:10 AM UTC+5:30, Ian wrote:
> On Fri, Mar 21, 2014 at 3:09 PM, Rustom Mody wrote:
> > A 'for' introduces a scope:
> This is false.
And
On Saturday, March 22, 2014 3:04:48 AM UTC+5:30, Gregory Ewing wrote:
> > A 'for' introduces a scope:
> No, it doesn't!
Ha -- funny that *I* missed that one. Thanks both Ian and Gregory
In fact one of my grumbles against python is that list comprehension's
are a poor imitation of haskell's comprehensions.
And then I promptly forgot about it!
Actually there are two leakages in python 2, one of which is corrected
in python 3.
One: a comprehension variable leaks outside after the comprehension
This is corrected in python3.
Two: A comprehension variable is not bound but reassigned across the
comprehension. This problem remains in python3 and causes weird behavior when
lambdas are put in a comprehension
>>> fl = [lambda y : x+y for x in [1,2,3]]
>>> [fl[i](2) for i in [0,1,2]]
[5, 5, 5]
The same in haskell:
Prelude> let fl = [\ y -> x + y | x <- [1,2,3]]
Prelude> [(fl!!i) 0 | i<- [0,1,2]]
[1,2,3]
More information about the Python-list
mailing list