Gleichmäßig verteilte Multiples / Samples innerhalb eines Bereichs erzeugen

Spezifische Instanz des Problems
Ich habe einen Int-Bereich von 1-100. Ich möchte n Gesamtzahlen in diesem Bereich erzeugen, die sindso gleichmäßig wie möglich verteilt und füge den ersten und den letzten Wert hinzu.

Beispiel

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

Was ich aktuell habe
Ich habe tatsächlich einen Arbeitsansatz, aber ich habe immer das Gefühl, dass ich darüber nachdenke und etwas Einfacheres verpasse. Ist dies der effizienteste Ansatz oder könnte dies verbessert werden?

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

Beachten Sie, dass diese Funktion immer mindestens den unteren und oberen Grenzwert des Bereichs zurückgibt. Also, ich zwingen >= 2

Nur als Referenz für die Suche benutze ich diese Option, um Bildrahmen aus einer gerenderten Sequenz abzutasten, in der Sie normalerweise die erste, mittlere und letzte verwenden möchten. Aber ich wollte in der Lage sein, ein bisschen besser zu skalieren, um wirklich lange Bildsequenzen zu verarbeiten und eine bessere Abdeckung zu erzielen.

Gelöst: Aus der ausgewählten Antwort

Ich habe letztendlich diese leicht modifizierte Version von @ vartecs Antwort verwendet, um ein Generator zu sein und auch die Obergrenze zu setzenn Wert für die Sicherheit:

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

Antworten auf die Frage(5)

Ihre Antwort auf die Frage