Du liest:
Python range: Alles über die Zahlenreihen in Python

Python range: Alles über die Zahlenreihen in Python

von Patrick
19.04.2020
Jetzt Python programmieren lernen

Manchmal benötigen wir Zahlenreihen für die vielfältigen Operationen, die wir beim Programmieren ausführen müssen, wofür uns in Python range zur Verfügung steht.

1. Die range Funktion

1.1 Verwendung in Python3

Du kannst range mit 3 Parametern aufrufen, von denen 2 optional sind.

range(Start, Stop, Schritt)
    Start (optional)    Anfang der Zahlenreihe
                        Standartwert ist 0
    Stop (erforderlich) Ende der Zahlenreihe
    Schritt (optional)  Wert für Erhöhung der Zahlen
                        Standardwert ist 1

Wenn du nun range ausführst und den Typen ansiehst, wirst du feststellen, dass es sich dabei nicht um eine Funktion, sondern um eine Klasse mit demselben Namen handelt:

x = range(3)
print(type(x), x)
# <class 'range'> range(0, 3)

Dennoch verhält sich diese Klasse in einer for-Schleife genau wie eine Liste von Integern. Somit kannst du auch mit jedem einzelnen generierten Wert arbeiten.

x = range(3)
for n in x:
    print(type(n), n)

Output:

<class 'int'> 0
<class 'int'> 1
<class 'int'> 2

Wenn du einen zweiten Parameter angibst, gibt der Erste an, mit welcher Zahl die Zahlenreihe startet und der Zweite bei welcher diese endet.

x = range(1, 5)
for n in x:
    print(n)

Output

1
2
3
4

Mit einem dritten Parameter kannst du angeben, um wie viel die nächste generierte Zahl höher sein soll, als die vorgehende.

x = range(0, 20, 5)
for n in x:
    print(n)

Output:

0
5
10
15

1.2 Verwendung mit negativen Werten

Wenn du versuchst, range mit nur einem negativen Parameter aufzurufen, wirst du keine Zahlenwerte erhalten, da der Standartwert für den Schrittparameter 1 ist.

x = range(-10)
print(type(x), x)
# <class 'range'> range(0, -10)

Im Umkehrschluss müsstest du -10 als Startwert und 0 als Endwert festlegen, um eine negative Zahlenreihe zu erhalten.

-10
-9
-8
-7
-6
-5
-4
-3
-2
-1

Alternativ könntest du dasselbe Ergebnis erzielen, wenn du für den Schrittparameter einen negativen Wert angibst.

x = range(-1, -11, -1)
for n in x:
    print(n)

Output:

-1
-2
-3
-4
-5
-6
-7
-8
-9
-10

Am Ergebnis erkennst du, dass es sich um dieselben Zahlenwerte handelt, nur in umgekehrter Reihenfolge.

1.3 range Objekt in Liste umwandeln

Ein range-Objekt in eine Liste umzuwandeln ist einfach, du musst nur das range-Objekt an list übergeben, wie hier:

x = list(range(3))
print(type(x), x)
# <class 'list'> [0, 1, 2]

2. range und xrange in Python 2

In älterem Code lässt sich oft noch die Funktion xrange entdecken, welche die Entsprechung von range in Python 3 ist, da die Version von range aus Python 2 heute üblicherweise keine Verwendung mehr findet.

x = range(3)
print(type(x), x)
for n in x:
    print(type(n), n)

# (<type 'list'>, [0, 1, 2])
# (<type 'int'>, 0)
# (<type 'int'>, 1)
# (<type 'int'>, 2)

Im vorigen Beispiel kannst du sehen, dass range in Python 2 eine Liste aus Integern generiert, statt wie in Python 3 zuvor eine Klasse, xrange jedoch verhält sich genauso wie range in Python 3 mit dem Unterschied, dass der Klassenname dieses Mal xrange anstatt range lautet:

x = xrange(3)
print(type(x), x)
for n in x:
	print(type(n), n)

# (<type 'xrange'>, xrange(3))
# (<type 'int'>, 0)
# (<type 'int'>, 1)
# (<type 'int'>, 2)

Der Vorteil von xrange gegenüber range ist, dass ein xrange-Objekt immer gleich viel Speicher braucht, während dies bei mittels range generierter Listen von der Listengröße abhängig ist.
(siehe auch: Python.org: xrange)

3. Fazit

Die Funktion range ist äußerst praktisch, wenn du mit Zahlenreihen arbeiten musst. In Python 3 ist es als speicherschonende Klasse implementiert, während xrange eine sehr ähnliche Klasse in Python 2 darstellt, da range dort eine Funktion ist, die stattdessen eine Liste zurückgibt, deren Größe im Speicher abhängig von den Elementen und der Anzahl dieser in der Liste ist.

Wenn du noch Fragen, Anregungen, Lob oder Kritik hast, schreibe mir doch bitte einen Kommentar.



Bislang gibt es keine Kommentare. Markier dein Revier und sei der Erste!

Schreibe einen Kommentar

Das könnte dich auch interessieren