proposition for syntax for initialisation of multidimensional lists

Nils Grimsmo nils.grimsmo at idi.ntnu.no
Tue Oct 12 17:02:24 EDT 2004


i always have trouble explaining why creation of multidimensional lists 
is not as straight forward as it could be in python. list comprehensions 
are ugly if you are new to the language. i really would like  to see it 
made easy. i propose using tuples in the same way as integers are now. 
example:

 >>> [0] * (2,3,4)
[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[0, 0, 0, 0], [0, 0, 0, 
0], [0, 0, 0, 0]]]

this is even less "mathematically bad" syntax than multiplication with 
an integer, as multiplication of vectors is only well defined if they 
are of the same length. [1] * 7 could be interpreted as a vector of 
length one multiplied with a scalar 7 resulting in the vector [7]. (this 
  was not meant as a proposition to remove the current syntax.)

i would be easy to implement:

class mylist(list):
     def __mul__(self, dims):
         if dims.__class__ == (()).__class__:
             if len(dims) > 1:
                 return [self.__mul__(dims[1:]) for i in range(dims[0])]
             else:
                 return list.__mul__(self, dims[0])
         else:
             return list.__mul__(self, dims)

li = mylist()
li.append(0)
print li * (2,3,4)


what do you think?


klem fra nils



More information about the Python-list mailing list