# Nested lists#

Let’s take another look at our 2D list `grades_2D`.

```grades_2D = [[100,80, 95, 84],
[68, 99, 70, 95],
[40, 100,95, 80],
[65, 70, 68, 80],
[70, 79, 85, 96]]
```

So far, we’ve been talking about 2D lists as lists of lists, but now let’s shift our thinking a little bit so we can work with 2D lists in a more intuitive manner. We know that we can use two sets of square brackets to access individual elements of this 2D list, for instance, using `grades_2D[0][0]` to get the 0 index item in the 0 index list of `grades_2D`, which, in this case, is `100`. While this thinking is strictly correct, it might be helpful to use a more intuitive system to understand this 2D list. Thankfully, there is one! Let’s use arbitrary variables `i` and `j` to index `grades_2D`. How can we think about `grades_2D[i][j]`? Take a look at this diagram.

We can think of `i` as the row of the 2D list and of `j` as the column, just like in an Excel spreadsheet! When we align the elements of the 2D list like this, it becomes trivial to find the index of a specific element. For example, let’s find `grades_2D[1][2]`. In this case, `i = 1` and `j = 2`. We can mentally do something like:

`grades_2D[1][2]` will be the intersection of those lines, which is 70! Visualizing 2D lists in this way can be very helpful for accessing and creating them. What elements are at the following indices of `grades_2D`?