Generowanie równomiernie rozmieszczonych wielokrotności / próbek w zakresie

Określony przypadek problemu
Mam zakres int od 1-100. Chcę wygenerować n całkowitych liczb w tym zakresie, które sąmożliwie równomiernie rozłożone i zawierają pierwszą i ostatnią wartość.

Przykład

<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>

Co mam obecnie
Właściwie mam podejście do pracy, ale czuję, że myślę o tym i brakuje mi czegoś prostszego? Czy jest to najbardziej efektywne podejście, czy można to poprawić?

<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>

Zauważ, że zapewniam, że ta funkcja zawsze zwróci co najmniej dolną i górną wartość graniczną zakresu. Więc, wymuszamn >= 2

Tylko dla wyszukiwania, używam tego do próbkowania ramek obrazu z renderowanej sekwencji, w której zazwyczaj chciałbyś mieć pierwszy, środkowy, ostatni. Ale chciałem być w stanie skalować się trochę lepiej, aby obsłużyć naprawdę długie sekwencje obrazów i uzyskać lepszy zasięg.

Rozwiązane: Z wybranej odpowiedzi

Skończyło się na tym, że użyłem tej nieco zmodyfikowanej wersji odpowiedzi @ vartec, aby być generatorem, a także zamknąćn wartość dla bezpieczeństwa:

<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