def jefferson(votes, seats):
    """Apportion seats using the Jefferson method.

    Known also as the D'Hondt method or Hagenbach-Bischoff method.

    :param list votes: a list of vote counts
    :param int seats: the number of seats to apportion
    """
    allocated = [0] * len(votes)
    while sum(allocated) < seats:
        quotients = [1.0 * vote / (allocated[idx] + 1) for idx, vote in enumerate(votes)]
        idx_max = quotients.index(max(quotients))
        allocated[idx_max] += 1
    return allocated