Compact syntax for 0-matrix?

Alexander alecdem at mit.edu
Sun May 28 22:29:06 EDT 2000


You can use Numeric Python to do that.
it has function "zeros" for doing that.


Kirby Urner wrote:

> Looking for good ideas for compact syntax that
> returns a list of lists, all 0 members,
> given n,m for n lists of m members each.
>
> Example:
>
>  >>> output = zeromatrix(3,3)  # 3 lists of 3 members each
>  >>> output
>  [[0,0,0],[0,0,0],[0,0,0]]
>  >>> output = zeromatrix(3,4)  # 3 lists of 4 members each
>  >>> output
>  [[0,0,0,0],[0,0,0,0],[0,0,0,0]]
>
> So far what I've got is:
>
>    def zeromatrix(n,m):
>         output = [0]*n
>         for i in range(n): output[i]=[0]*m
>         return output
>
> But I think that's sort of ugly.
>
> I tried:
>
>    def zeromatrix(n,m):
>         return [[0]*m]*n
>
> which looks nicer, appeared to work, but it's actually
> reusing the same object n times.  So, using the above
> def, if you go:
>
>  >>> output = zeromatrix(3,3)
>  >>> output
>  [[0,0,0],[0,0,0],[0,0,0]]
>  >>> output[0][0] = 5
>  >>> output
>  [[5, 0, 0], [5, 0, 0], [5, 0, 0]]
>
> ... which is NOT the behavior I want.  I fell into
> the "multiple pointers to same object" trap.
>
> The first definition gets around that problem, but
> I don't think it's as compact as it could be.
>
> Kirby




More information about the Python-list mailing list