2017-02-28 4 views
0

Ich habe eine Reihe von nicht-negativen ganzen Zahlen, die kleinste davon ist min_val, und die größte davon ist max_val. Ich möchte range verwenden, um eine Liste von Fachgrenzen mit einem gegebenen step zu erstellen, so dass der erste Wert in dem Bereich gleich min_val ist und dass der letzte Wert in dem Bereich größer als max_val ist. Mein Versuch ist:Erstellen Sie Bins mit Bereich

bins = list(range(min_val, max_val + step + 1, step)) 

Was ich meinen Kopf nicht scheinen kann umwickeln ist, wie der Minimalwert für das zweite Argument zu range(), um zu bestimmen, dass der letzte Wert im Bereich garantieren kann mehr als max_val ist. Ist mein Versuch richtig?

+0

Wenn es __GREATER__ sein muss, im Gegensatz zu größer oder gleich, Änderung 1 bis 2, sonst ist es in Ordnung – Jerfov2

+0

„Größer als“ (>) oder „größer als oder gleich "(> =) als' max_val'? – Elmex80s

+0

@ Jerfov2 Es muss größer sein als (>). Warum 2? –

Antwort

0

Ihr Code ist korrekt.

Lets vergessen die range Funktion für jetzt. Mit einer oberen Grenze von max_val + step von max_val + step garantieren Sie, dass der letzte Schritt größer ist als (>) max_val, denn wenn es bei max_val aufhören würde, könnten Sie einen weiteren Schritt der Größe step tun, weil max_val + step die obere Grenze ist.

Jetzt stoppt die Bereichsfunktion vor dem (<) zweiten Parameter. Wenn Ihre Obergrenze also max_val + step ist, müssen Sie 1 hinzufügen, damit Sie max_val + step + 1 haben.

Beachten Sie, dass diese falschen Code ist:

>>> range(6, 11 + 3 + 2, 3) 
[6, 9, 12, 15] 

weil Sie 12 der größte Wert in der Liste sein. Diese

ist auch ein falsche Ergebnis

>>> range(5, 11 + 3 + 0, 3) 
[5, 8, 11] 
Verwandte Themen