A = [[1, 2], [3, 4]]
A[1] is [3, 4], which is a row. To get a column, [2, 4], one has to write A[:,1] in numpy.
When it comes to matrix - vector multiplication,
[1, 2] @ [[1, 2],
[3, 4]] -> [7, 10]
has a text-book appearance, while
[[1, 2],
[3, 4]] @ [1, 2] -> [5, 11]
has to be mentally cast into
([[1, 2],
[3, 4]] @ [[1],
[2]])[0] -> [5, 11]
While it is more common in math literature to see Mat @ vec than vec @ Mat, I don't think anyone who has completed an introductory linear algebra course would have trouble understanding what [1, 2, 3] @ Mat means. On the other hand, novice programmers may find it puzzling why Mat @ [Mat1, Mat2] is the same as [Mat @ Mat1, Mat @ Mat2], but [Mat @ [vec1, vec2]] is not [Mat @ vec1, Mat @ vec2].