points = [0.0, 1.0, 2.0, 8.0, 9.0, 10.0]
centers = [0.0, 2.0]
history = []
for step in range(10):
    groups = [[] for _ in centers]
    for x in points:
        j = min(range(len(centers)), key=lambda j: (abs(x-centers[j]), j))
        groups[j].append(x)
    new = [sum(g)/len(g) if g else centers[j]
           for j, g in enumerate(groups)]
    inertia = sum((x-new[j])**2 for j, g in enumerate(groups) for x in g)
    history.append((new[:], inertia, [len(g) for g in groups]))
    print(step+1, new, inertia, [len(g) for g in groups])
    if new == centers:
        break
    centers = new
assert history[0] == ([0.5, 7.25], 39.25, [2, 4])
assert centers == [1.0, 9.0] and history[-1][1] == 4.0
