Syntax Question - list multiplication

Thomas Jollans thomas at jollans.com
Sun Aug 19 18:40:40 EDT 2007


On Sunday 19 August 2007, Pablo Torres wrote:
> Hi guys!
>
> I am working on Conway's Game of Life right now and I've run into a
> little problem.
>
> I represent dead cells with 0s and live ones with 1s. Check this out:
> 	>>> grid = [[0] * 3] * 3
> 	>>> grid
>
> 	[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>
> 	>>> grid[0][0] = 1
>
> 	[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
>
> Now, that's not what I want. I just want the first element of the
> first sublist to be a 1, not the first of every one. Here's what I
> tried and didn't work:
>
> 0.  grid = [[0] * 3][:] * 3    then the same grid[0][0] = 1 statement
> 1.  grid = [[0][:] * 3] * 3    followed by the same assignment
> 2.  (grid[0])[0] = 1    with the original initialization of the grid
>
> So, that means that it isn't a problem with two different variables
> refering to the same list (0. and 1. prove that). What I don't
> understand is why 2. doesn't work either. I'm baby-feeding my
> instructions to Python and the mistake is still there. Any ideas?


If you want three copies of the list, you need to copy it thrice (well, twice)

Thus:

>>> row = [0] * 3
>>> grid = []
>>> for n in xrange(3): grid.append(row[:])
...
>>> grid
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> grid[0][0] =1
>>> grid
[[1, 0, 0], [0, 0, 0], [0, 0, 0]]
>>>


-- 
      Regards,                       Thomas Jollans
GPG key: 0xF421434B may be found on various keyservers, eg pgp.mit.edu
Hacker key <http://hackerkey.com/>:
v4sw6+8Yhw4/5ln3pr5Ock2ma2u7Lw2Nl7Di2e2t3/4TMb6HOPTen5/6g5OPa1XsMr9p-7/-6
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 196 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.python.org/pipermail/python-list/attachments/20070820/53907d2f/attachment.sig>


More information about the Python-list mailing list