Gerando múltiplos / amostras uniformemente distribuídos dentro de um intervalo

Instância específica do problema
Eu tenho um intervalo de int de 1-100. Eu quero gerar n números totais dentro desse intervalo que sãotão uniformemente distribuído quanto possível e inclua o primeiro e o último valor.

Exemplo

<code>start = 1, end = 100, n = 5   
Output: [1, 25, 50, 75, 100]

start = 1, end = 100, n = 4   
Output: [1, 33, 66, 100]

start = 1, end = 100, n = 2   
Output: [1, 100]
</code>

O que eu tenho atualmente
Eu realmente tenho uma abordagem de trabalho, mas eu continuo sentindo que estou pensando nisso e falta algo mais simples? Esta é a abordagem mais eficiente ou poderia ser melhorada?

<code>def steps(start, end, n):
    n = min(end, max(n, 2) - 1)
    mult = end / float(n)
    yield start
    for scale in xrange(1, n+1):
        val = int(mult * scale)
        if val != start:
            yield val
</code>

Note que estou garantindo que esta função retornará sempre pelo menos os valores limite inferior e superior do intervalo. Então eu forçon >= 2

Apenas para referência de pesquisa, estou usando isso para amostrar quadros de imagem de uma sequência renderizada, onde você normalmente deseja o primeiro, o meio, o último. Mas eu queria ser capaz de escalar um pouco melhor para lidar com seqüências de imagens realmente longas e obter uma melhor cobertura.

Resolvido: da resposta selecionada

Acabei usando esta versão ligeiramente modificada da resposta do @vartec, para ser um gerador, e tambémn valor para segurança:

<code>def steps(start,end,n):
    n = min(end, max(n, 2))
    step = (end-start)/float(n-1)
    return (int(round(start+x*step)) for x in xrange(n))
</code>

questionAnswers(5)

yourAnswerToTheQuestion