fdmillion fdmillion - 11 months ago 74
Python Question

Python: initialize multi-dimensional list

I want to initialize a multidimensional list. Basically, I want a 10x10 grid - a list of 10 lists each containing 10 items.

Each list value should be initialized to the integer 0.

The obvious way to do this in a one-liner:

myList = [[0]*10]*10
won't work because it produces a list of 10 references to one list, so changing an item in any row changes it in all rows.

The documentation I've seen talks about using
to copy a list, but that still won't work when using the multiplier:
myList = [0]*10; myList = myList[:]*10
has the same effect as
myList = [[0]*10]*10

Short of creating a loop of
s, is there a quick efficient way to initialize a list in this way?

Answer Source

You can do it quite efficiently with comprehension:

a = [[0] * number_rows for i in range(number_cols)]