I think, strictly speaking, not one end of the list should be the top of the stack / front row. The implementation of your data structure is separate from the expected behavior of the data structure.
For example, the last in, first out (LIFO) behavior appears on the stack. In other words, the last item that was saved on the stack is the "top" item. If you decide to implement your stack as a list, where each new element is added to index 0, and all existing elements are shifted by 1, then index 0 will be your top one. On the other hand, if you implement your stack as a list, where each new element is added to the end of the list, then the -1 index will be your top.
With that said, the previous implementation is pretty inefficient, because every time you insert / set values on the stack, you have to move your entire list, while the last implementation is more efficient, because you can just add / remove items to / from the end list.
Also, just to point out what was mentioned in other answers / comments that I did not explicitly do, your implementation should also not be a list. When I said that implementation and behavior are separate, this also applies to the underlying data structure.
source share