have a look at the following piece of code, which shows a list comprehension..
>>> i = 6
>>> s = [i * i for i in range(100)]
>>> p
Yes, there is a reason, and the reason is that they didn't want the temporary variable in a list comprehension to leak into the outer namespace. So it is an intentional change that is a result of list comprehensions now being syntactic sugar for passing a generator expression to list().
Ref: PEP3100.