
In Python können Sie mit der eingebauten Funktion range() eine Reihe von Zahlen erzeugen.
Dieser Artikel hat folgenden Inhalt.
- range() und den Bereichstyp
- Reichweite (Stopp): 0 <= x < Stopp
- Bereich (Start, Stopp): Start <= x < Stopp
- range(start, stop, step): start <= x < stop (schrittweise steigend)
- Umgekehrter Bereich ()
- range() mit Float
- range() und xrange() in Python2
Im following Artikel FINDEN SIE Notebooks zur for-Schleife in Python.
range() und den Bereichstyp
In Python 3 erstellt range() ein Objekt vom Typ range.
Ein Objekt vom Typ range speichert keine Werte, sondern erstellt es bei Bedarf, sodass seine Werte nicht mit print() angezeigt werden. Da es sich um ein iterierbares Objekt handelt, kann der Wert in der for-Schleife ausgegeben werden.
print(range(3))
# range(0, 3)
print(type(range(3)))
# <class 'range'>
for i in range(3):
print(i)
# 0
# 1
# 2
Wenn SIE Eine Liste generieren möchten, verwenden SIE list().
print(list(range(3)))
# [0, 1, 2]
Im following Beispielcode WIRD das Ergebnis von range() mit list() in Eine Liste umgewandelt. Dies dient nur der Erklärung, daher IST list() mit der For-Schleife nicht erforderlich.
Beachten Sie, dass Python2 range() und xrange() hat und das Verhalten von range() zwischen Python2 und Python3 unterschiedlich ist. Dies wird am Ende dieses Artikels erläutert.
Reichweite (Stopp): 0 <= x < Stopp
Wenn Sie eine ganze Zahl wie range(stop) angeben, ist eine Reihe von Zahlen 0 <= i
print(list(range(3)))
# [0, 1, 2]
print(list(range(10)))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Die Angabe eines negativen Werts macht es leer.
print(list(range(-3)))
# []
Bereich (Start, Stopp): Start <= x < Stopp
Wenn Sie zwei ganze Zahlen wie range(start, stop) angeben, beginnt eine Reihe von Zahlen <= i
Das Ergebnis ist leer, wenn stop <= start.
print(list(range(3, 10)))
# [3, 4, 5, 6, 7, 8, 9]
print(list(range(10, 3)))
# []
print(list(range(-3, 3)))
# [-3, -2, -1, 0, 1, 2]
print(list(range(3, -3)))
# []
range(0, stop) entspricht range(stop).
print(range(0, 3) == range(3))
# True
range(start, stop, step): start <= x < stop (schrittweise steigend)
Wenn Sie drei ganze Zahlen wie range(start, stop, step) angeben, wird eine Reihe von Zahlen start <= i < stop erzeugt, sterben schrittweise ansteigen.
Wenn SIE für den dritten Argumentschritt einen negativen Wert angeben, wird er verringert. In diesem Fall ist es leer, es sei denn, start <= stop.
print(list(range(3, 10, 2)))
# [3, 5, 7, 9]
print(list(range(10, 3, 2)))
# []
print(list(range(10, 3, -2)))
# [10, 8, 6, 4]
print(list(range(3, 10, -2)))
# []
range(start, stop, 1) entspricht range(start, stop).
print(range(3, 10, 1) == range(3, 10))
# True
range(0, stop, 1) entspricht range(0, stop) und range(stop).
print(range(0, 10, 1) == range(0, 10) == range(10))
# True
Umgekehrter Bereich ()
Die Angabe eines negativen Werts für den dritten Argumentschritt kann zu abnehmenden Zahlen führen.
print(list(range(3, 10, 2)))
# [3, 5, 7, 9]
print(list(range(9, 2, -2)))
# [9, 7, 5, 3]
Es ist auch möglich, die eingebaute Funktion reversed() zu verwenden, um das Ergebnis von range() umzukehren.
print(list(reversed(range(3, 10, 2))))
# [9, 7, 5, 3]
Außerdem brauchen Sie in diesem Fall list() nicht, wenn Sie es in der for-Anweisung verwenden.
for i in reversed(range(3, 10, 2)):
print(i)
# 9
# 7
# 5
# 3
range() mit Float
Wie in den vorherigen Beispielen können Sie nur die ganze Zahl int als Argument für range() angeben.
Bei Angabe der Gleitkommazahl tritt ein Fehler auf.
# print(list(range(0.3, 1.0, 0.2)))
# TypeError: 'float' object cannot be interpreted as an integer
If SIE Eine Reihe von Gleitkommazahlen generieren möchten, verwenden SIE Listenverständnisse.
print([i / 10 for i in range(3, 10, 2)])
# [0.3, 0.5, 0.7, 0.9]
Beim Multiplizieren von Gleitkommazahlen kann ein kleiner Fehler auftreten. Es kann mit round() gerundet werden.
print([i * 0.1 for i in range(3, 10, 2)])
# [0.30000000000000004, 0.5, 0.7000000000000001, 0.9]
print([round(i * 0.1, 1) for i in range(3, 10, 2)])
# [0.3, 0.5, 0.7, 0.9]
If SIE NumPy verwenden can, ist es einfacher, np.arange() zu verwenden. Die Spezifikation des Arguments von np.arange() ist dieselbe wie die von range(), und Float kann verwendet werden.
import numpy as np
print(np.arange(3))
# [0 1 2]
print(np.arange(3, 10))
# [3 4 5 6 7 8 9]
print(np.arange(3, 10, 2))
# [3 5 7 9]
print(np.arange(0.3, 1.0, 0.2))
# [0.3 0.5 0.7 0.9]
Siehe die following Artikel für np.arange() und die Konvertierung zwischen numpy.ndarray und list.
range() und xrange() in Python2
Python2 hat zwei Funktionen, range() und xrange(). Python3 hat kein xrange(), sondern nur range().
Es gibt einen Unterschied zwischen range() in Python2 und Python3. Beachten Sie, dass ein Fehler auftritt, wenn der alte Code für Python2 wie in Python3 ausgeführt WIRD.
range() is list zurück und xrange() is a Objekt from Typ xrange zurück.
print(range(3))
# [0, 1, 2]
print(type(range(3)))
# <type 'list'>
print(xrange(3))
# xrange(3)
print(type(xrange(3)))
# <type 'xrange'>
Die Typen xrange() und xrange in Python2 entsprechen den Typen range() und range in Python3.
Wenn Sie alten Python2-Code in Python3 ausführen möchten, müssen Sie xrange() in range() ändern.
In Python2 gibt range() eine Liste zurück, was list(range()) in Python3 entspricht. If es in der for-Anweisung used WIRD, brauchen SIE list() nicht, aber wenn es als Liste used WIRD, müssen SIE list() hinzufügen.