This week was … kind of slow. We talked about sorting values into bins.
Let’s imagine that you have 1,000 numbers from 0 to 10, and I want you to sort them into 10 equally sized bins. How would you do this?
The naïve thing to do would be to sort each number like this:
bins = [0,0,0,0,0,0,0,0,0,0]
for number in numbers: if number < 1: bins[0] += 1 continue elif number < 2:
. . .
else:
bins[9] += 1
continue
That is, to write out every possible option in a big if-then-else statement. The problem is that this approach doesn’t scale well. What if I wanted them sorted into 1,000 buckets? It would be extremely tedious to write this using the same approach. So what did the professor ask us to do instead? Let me introduce you to the bisect
module. A module is like a collection of useful functions and variables and classes and whatnot, all bound together for easy distribution. bisect
comes built into python, I believe. It contains several useful functions, but the one that we’re going to use is called bisect_left
. bisect_left
takes a list and a thing, and tells you how far into the list you have to go to find a thing bigger than the first thing, minus one.
Now, we can write something like this:
import bisect
bins = [0]*10 for number in numbers: bins[min(len(bins), bisect.bisect_left(range(10), number))] += 1 —-
Much shorter, and we can change the number of bins by messing around with the range
call.
After talking about bins, and doing an exercise involving histograms, we moved on to Classes. In python, remember how there were different types of things, like list
s, int
s, strings
s, function
s, et cetera? A class is a type of thing. Python let’s us define our own types, and make them do things. Here’s an example:
class Animal: def init(self, name): self._name = name
def __str__(self):
return "A " + self._name
This class can be used like this:
a = Animal() # Creates a new Animal print str(a) # Turns the Animal into a string and prints it. —-
The __init__
function tells us how to make a new thing of a class, and the __str__
function tells us how to turn it into a string. There are a bunch of other special functions too, but not all functions in a class need to be special. One of the most useful things about classes is their ability to bundle information and functions together, so that the functions can rely on the information being there without having to worry about keeping a bunch of different versions separate.
That’s all this week, but I hope to see you again next Sunday. Happy coding!