Naming variables does have one unwritten rule... Make them mean what they represent.
length = len(lsd) / 2
The variable is not truthful. What it represents is not length, but the middle of the list. Because it is going to be used as an index it must be an integer. Python 2 returns an integer when both numerator and denominator are integers (integer division). We could write this more explicitly for the sake of the reader.
middle = int(len(lsd) / 2)
This is also compatible with Python 3, which makes it mandatory since all rationals return as floats.
Python 2 requires that we explicitly (or implicitly with 2.0) declare our floats. For the sake of the reader, don't write counting numbers as floats. Leave them as integers. The value that could feasibly be a float is the one to declare.
return float(x[m - 1] + x[m]) / 2
On the whole, too many variables can really muddy the waters, despite any belief it will make it easier to understand the code. It just makes for harder debugging (and reading). Pick the working variables you need, and if necessary, re-use them.