Many newbie questions regarding python

Ethan Furman ethan at stoneleaf.us
Sat Oct 9 22:30:16 EDT 2010


Steven D'Aprano wrote:
> And how often do you have an list that you are creating where you don't 
> know what items you have to initialise the list with?

[snip]

> You are right to point out that the third case is a Python gotcha: [[]]*n 
> doesn't behave as expected by the naive or inexperienced Python 
> programmer. I should have mentioned it, and pointed out that in that case 
> you do want a list comp [[] for i in range(n)].
> 
> But that doesn't mean that the list comp is the general purpose solution. 
> Consider the obvious use of the idiom:
> 
> def func(arg, count):
>     # Initialise the list.
>     L = [arg for i in range(count)]
>     # Do something with it.
>     process(L, some_function)
> 
> def process(L, f):
>     # Do something with each element.
>     for item in enumerate(L):
>         f(item)
> 
> Looks good, right? But it isn't, because it will suffer the exact same 
> surprising behaviour if f modifies the items in place. Using a list comp 
> doesn't save you if you don't know what the object is.

I've only been using Python for a couple years on a part-time basis, so 
I am not aquainted with this obvious use -- could you give a more 
concrete example?  Also, I do not see what the list comp has to do with 
the problem in process() -- the list has already been created at that 
point, so how is it the list comp's fault?

~Ethan~



More information about the Python-list mailing list