[Python-ideas] Construct a matrix from a list: matrix multiplication

Chris Angelico rosuav at gmail.com
Fri Mar 31 03:58:21 EDT 2017


This keeps on coming up in one form or another - either someone
multiplies a list of lists and ends up surprised that they're all the
same, or is frustrated with the verbosity of the alternatives.

Can we use the matmul operator for this?

class List(list):
    def __matmul__(self, other):
        return [copy.copy(x) for x in self for _ in range(other)]

>>> x = List([[0]*4]) @ 2
>>> x
[[0, 0, 0, 0], [0, 0, 0, 0]]
>>> x[0][0] = 1
>>> x
[[1, 0, 0, 0], [0, 0, 0, 0]]

If this were supported by the built-in list type, it would be either of these:

>>> x = [[0] * 4] @ 2
>>> x = [[0] @ 4] @ 4

(identical functionality, as copying an integer has no effect).

The semantics could be either as shown above (copy.copy()), or
something very simple and narrow like "lists get shallow-copied, other
objects get referenced".

Thoughts?

ChrisA


More information about the Python-ideas mailing list