list comprehension misbehaving

W

Wolfgang Maier

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]

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

Thanks for your help,
Wolfgang
 
D

duncan smith

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]

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

Thanks for your help,
Wolfgang

With the for loop the list is printed each time you pop an element. With
the list comprehension all but one of the elements are popped before the
string representation of the resulting list (containing several
references to a) is printed.

The two list comprehensions that you say "work" behave differently
because the first contains copies of a (which are unaffected by
subsequent pops), and the second because (I imagine) it does something
similar to,

[a.pop() and repr(a) for i in a[:-1]]

on 2.7 (I haven't migrated to 3 yet). i.e. The list contains a
representation of a after each element is popped.

Duncan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top