K-Means is a very simple clustering algorithm, I would say the first to test before going for more complex things.
The K-Means algorithm http://en.wikipedia.org/wiki/K-means_clustering
Proper K-Means initialization is strongly advised http://en.wikipedia.org/wiki/K-means%2B%2B, as it.
If you're not happy with K-Means, then you use EM algorithm with Gaussian mix ( http://en.wikipedia.org/wiki/Mixture_model ), not too hard to code and you can use K-Means to initialize it !
Those have been implemented 100 times in Python, check any machine learning toolbox.