# Median: list index out of range

#1

What does this error mean? Is it my else formula that is incorrect? I think I'm subtracting 1 from the numbers, not the length. But I can't add (+) two lens together.

``````def median(list):
new_list = sorted(list)
print new_list

if len(new_list) % 2 == 1:
m = (new_list[len(new_list) / 2])
return m
else:
m = (new_list[len(new_list)] / 2 + (new_list[len(new_list)] / 2) - 1)
return m``````

#2

It means your code is attempting to access a list element that does not exist.

There is the error.

#3

here:

``````    if len(new_list) % 2 == 1:
m = (new_list[len(new_list) / 2])``````

you do it right, yet here you do it wrong:

``````    else:
m = (new_list[len(new_list)] / 2``````

this will first get the index of `len(new_list)` which is an index error since lists are zero index based, and `len()` start counting at one, before dividing the value at index `len(new_list)` by 2

#4

I'm not quite sure I follow. In the first one, I still have len(new_list), which you said is not okay because new_list starts at 0. I could change the brackets but it len would still be the same.

#5

but you need to do the math first, you need to get the right middle index (length / 2) before retrieving the value

currently, you retrieve the value at length (index error)

#6

The only way that the following subscript can be legitimately used is if an assignment is made that extends the list.

``new_list[len(new_list)] = "some value"``

When we consider how many times `len()` is used it makes perfect sense to cache the value in a simple variable.

``n = len(new_list)``

Likewise, how many times do we need to halve it?

``m = int(n / 2)``

Now examine your code and see where these can be used to simplify it and make it easier to read and understand.

#7

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.