[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