List Init Behavior

Kevin Digweed Kevin.Digweed at MERANT.com
Wed Mar 8 07:25:39 EST 2000


Gene, try this:

l = map(lambda n: [0]*2, [None]*3)

Or there's the more general/readable generator function:

def listoflists(width, height, init=None):
       return map(lambda n,i=init: [i]*n, [width]*height)

... which will probably be faster using a loop instead of map/lambda.

Gene Chiaramonte wrote:
> 
> When initializing a list of lists, I came across this behavior.
> 
> >>> l = [[0]*2]*3
> >>> l
> [[0, 0], [0, 0], [0, 0]]
> >>> l[1][1] = 5
> >>> l
> [[0, 5], [0, 5], [0, 5]]
> 
> What I really want to do is quickly init a large list of lists where each
> row is its own list. Not all rows pointing to the same list as above. Any
> ideas?
> 
> This works - but I like the one line syntax better.
> x = 5
> y = 10
> l = [0]*y
> for i in range(y):
>     l[i] = [0]*x
> 
> Thanks,
> 
> Gene



More information about the Python-list mailing list