The convention for indexing is fairly simple. The first index is the row, the second the column, the third the file, and so on. The number of indices specified must match the number of dimensions in the data object. We just get a number. This shows that extraction preserves the class of the objects extracted.
Indexing is a lot more flexible than just extracting rows, columns or single values.
The simple minded way to think of them is like a queue of other objects. Each object may be different, and may be extracted using its name, or its order in the queue. However, you get different things using the two different extraction operators, and this confuses lots of new users. Take it slowly. Okay, testlist is a list object containing three other objects.