421 Stimmen

Warum beinhaltet range(start, end) nicht end?

>>> range(1,11)

gibt Ihnen

[1,2,3,4,5,6,7,8,9,10]

Warum nicht 1-11?

Haben sie das einfach zufällig so gemacht oder hat das einen Wert, den ich nicht sehe?

12voto

Skilldrick Punkte 66961

Die Länge des Bereichs ist der obere Wert minus der untere Wert.

Es ist sehr ähnlich zu etwas wie:

for (var i = 1; i < 11; i++) {
    //i goes from 1 to 10 in here
}

in einer C-ähnlichen Sprache.

Auch Ruby's Reichweite ist gut:

1...11 #this is a range from 1 to 10

Ruby erkennt jedoch, dass Sie oft den Terminalwert einschließen möchten, und bietet eine alternative Syntax an:

1..10 #this is also a range from 1 to 10

8voto

Robert Punkte 6224

Betrachten Sie den Code

for i in range(10):
    print "You'll see this 10 times", i

Die Idee ist, dass Sie eine Liste der Länge y-x über die man (wie oben zu sehen) iterieren kann.

Lesen Sie mehr über die Python-Dokumente for range - sie betrachten die Iteration der for-Schleife als primären Anwendungsfall.

6voto

Ashish Dixit Punkte 61

Grundlegend in Python range(n) iteriert n Zeiten, die von exklusiver Natur ist, weshalb sie nicht den letzten Wert liefert, wenn sie gedruckt wird, können wir eine Funktion erstellen, die inklusiven Wert gibt, was bedeutet, dass sie auch den letzten Wert im Bereich druckt.

def main():
    for i in inclusive_range(25):
        print(i, sep=" ")

def inclusive_range(*args):
    numargs = len(args)
    if numargs == 0:
        raise TypeError("you need to write at least a value")
    elif numargs == 1:
        stop = args[0]
        start = 0
        step = 1
    elif numargs == 2:
        (start, stop) = args
        step = 1
    elif numargs == 3:
        (start, stop, step) = args
    else:
        raise TypeError("Inclusive range was expected at most 3 arguments,got {}".format(numargs))
    i = start
    while i <= stop:
        yield i
        i += step

if __name__ == "__main__":
    main()

5voto

Nick Pantelidis Punkte 424

En range(n) in Python gibt von 0 bis n-1 zurück. Dementsprechend ist die range(1,n) von 1 bis n-1. Wenn Sie also den ersten Wert weglassen und auch den letzten Wert (n) erhalten möchten, können Sie dies ganz einfach mit dem folgenden Code tun.

for i in range(1, n + 1):
        print(i) #prints from 1 to n

1voto

Arseny Punkte 732

In vielen Fällen ist es einfach bequemer, darüber nachzudenken.

Grundsätzlich können wir uns einen Bereich als ein Intervall zwischen start y end . Wenn start <= end ist die Länge des Intervalls zwischen ihnen end - start . Wenn len tatsächlich als die Länge definiert wurde, hätten Sie:

len(range(start, end)) == start - end

Wir zählen jedoch die ganzen Zahlen, die in dem Bereich enthalten sind, anstatt die Länge des Intervalls zu messen. Um die obige Eigenschaft beizubehalten, sollten wir einen der Endpunkte einschließen und den anderen ausschließen.

Hinzufügen der step Parameter ist wie die Einführung einer Längeneinheit. In diesem Fall würde man erwarten, dass

len(range(start, end, step)) == (start - end) / step

für die Länge. Um die Anzahl zu erhalten, verwenden Sie einfach eine ganzzahlige Division.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X