list comprehension misbehaving
Peter Otten
__peter__ at web.de
Thu Mar 28 11:48:03 EDT 2013
Wolfgang Maier wrote:
> Dear all, with
> a=list(range(1,11))
>
> why (in Python 2.7 and 3.3) is this explicit for loop working:
> for i in a[:-1]:
> a.pop() and a
>
> giving:
> [1, 2, 3, 4, 5, 6, 7, 8, 9]
> [1, 2, 3, 4, 5, 6, 7, 8]
> [1, 2, 3, 4, 5, 6, 7]
> [1, 2, 3, 4, 5, 6]
> [1, 2, 3, 4, 5]
> [1, 2, 3, 4]
> [1, 2, 3]
> [1, 2]
> [1]
No. Introduce a result list, and you'll see that you append the *same* list
to the result nine times:
>>> a = range(1, 11)
>>> result = []
>>> for i in a[:-1]:
... result.append(a.pop() and a)
...
>>> result
[[1], [1], [1], [1], [1], [1], [1], [1], [1]]
> but the equivalent comprehension failing:
> [a.pop() and a for i in a[:-1]]
>
> giving:
> [[1], [1], [1], [1], [1], [1], [1], [1], [1]]
>
> ???
> Especially, since these two things *do* work as expected:
> [a.pop() and a[:] for i in a[:-1]]
> [a.pop() and print(a) for i in a[:-1]] # Python 3 only
So you already know the solution to your problem...
More information about the Python-list
mailing list