Numerisches Python - Arbeiten mit NumPy, Matplotlib und Pandas

Bernd Klein

Numerisches Python

Arbeiten mit NumPy, Matplotlib und Pandas

2019

373 Seiten

Format: PDF, ePUB

E-Book: €  23,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446461611

 

3 Kurze Einführung in Python
3.1 Datenstrukturen
3.1.1 Zahlen und Variablen

Wenn man die interaktive Shell von Python oder ipython startet, kann man sofort arithmetische Ausdrücke eingeben:

>>> 5 * 8.6 - 4 ** 2 27.0

Möchte man Werte speichern, so kann man dies in der Shell ebenso wie in einem Programm mittels Variablenzuweisungen bewerkstelligen. Dies geschieht ebenso wie in den meisten anderen Programmiersprachen durch ein Gleichheitszeichen:

>>> x = 42 >>> y = 10 >>> print(x - y) 32

Wie wir im vorigen Beispiel gesehen haben, ist eine Typdeklaration dazu nicht nur nicht erforderlich, sondern auch nicht möglich. Python kennt keine Typdeklarationen. Python-Variablen stellen Referenzen auf beliebige Objekte dar.

Auch wenn den Variablennamen keine Typen zugeordnet sind, so entspricht jedes in Python definierte Objekt einem Typ oder genauer gesagt der Instanz einer Klasse.

>>> x = 42 >>> type(x)

Wir sehen also, dass eine Integer-Zahl „42” angelegt worden ist. Diese Integer-Zahl ist ein Objekt der Integer-Klasse. Als Integers oder ganze Zahlen bezeichnet man in der Mathematik die Zahlen

..., -3, -2, -1, 0, 1, 2, 3, ...

Das heißt, die Zahlen gehen von minus unendlich bis unendlich. Selbstverständlich können wir „unendlich” in „int” nicht darstellen, aber die Zahlen in Python können extrem groß bzw. extrem klein werden:

>>> x = 2 ** 64 >>> x 18446744073709551616 >>> len(str(x)) 20 >>> x = 2 ** (2 ** 22) >>> len(str(x)) 1262612

Benutzt man einen Variablennamen, der nicht definiert ist, erzeugt man eine Ausnahme:

>>> counter Traceback (most recent call last): File "", line 1, in NameError: name 'counter' is not defined

Im folgenden Beispiel zeigen wir, dass Variablen Referenzen auf Objekte darstellen. Dazu benutzen wir die Funktion „id”, deren Rückgabewert ein Integer-Wert ist, der die Objekte eindeutig identifiziert. Wir sehen, dass das Integer-Objekt 10 nur einmal erzeugt wird und dass x und y beide dieses Objekt nach der Zuweisung „” referenzieren.

>>> x = 10 >>> id(x) 10106112 >>> y = x >>> id(y) 10106112 >>> y = 12 >>> id(y) 10106176 >>> id(x) 10106112

Neben kennt Python auch Float-Zahlen (), die in Ausdrücken auch mit Integer-Zahlen verknüpft werden können:

>>> f = 3.5 >>> type(f) >>> f2 = 878.323 >>> x = f * 10 >>> x 35.0
3.1.2 Zeichenketten/Strings

Ein weiterer wichtiger Datentyp in Python sind die Zeichenketten, die man meist auch als Strings bezeichnet. Strings können auf verschiedene Arten definiert werden: mit einfachen Anführungszeichen, mit doppelten Anführungszeichen oder mit drei einfachen bzw. drei doppelten Anführungszeichen. Wir demonstrieren diese Varianten im folgenden Beispiel. Wir verwenden auch das Nummernzeichen „#”, um Kommentare einzuleiten:

>>> 'ein String in einfachen Anführungszeichen' 'ein String in einfachen Anführungszeichen' >>> 'Miller\s son' # der Rückwärtsschrägstrich fungiert wie üblich als Escape-Zeichen 'Miller\\s son' >>> "Miller's son" # jetzt brauchen wir kein Escape-Zeichen "Miller's son" >>> print("""Strings mit drei Anführungszeichen können ... über mehrere ... Zeilen gehen und enden erst, wenn ... drei Anführungszeichen kommen""") Strings mit drei Anführungszeichen können über mehrere Zeilen gehen und enden erst, wenn drei Anführungszeichen kommen >>>

Bei den Strings in dreifachen Anführungszeichen wartet die Shell noch mit einer Besonderheit auf, wenn wir während der Definition eines solchen Strings die Return-Taste tippen. Die nächste Zeile wird dann nicht mit dem üblichen Prompt „ ” eingeleitet, sondern mit einem aus drei Punkten bestehenden Prompt „... ”. Damit signalisiert uns die Shell, dass der String noch nicht fertig ist. Der String ist erst fertig, wenn wieder entsprechend drei einfache () bzw. doppelte () Anführungszeichen eingegeben werden.

Strings können indiziert werden, dabei entspricht das erste Zeichen dem Index 0. Das letzte Zeichen eines Strings können wir mit dem Index ansprechen, d.h. mit negativen Zahlen erhält man eine Indizierung von rechts:

>>> language = "Python" >>> language[0] # 1. Zeichen des Strings an der Stelle 0 'P' >>> language[2] # 3. Zeichen des Strings an der Stelle 2 't' >>> language[-1] # letztes Zeichen 'n' >>> language[-2] # vorletztes Zeichen 'o'

Während man mit dem Indizieren nur einzelne Zeichen, also Strings der Länge 1, aus einem String erhalten kann, ermöglicht der Teilbereichsoperator (Slicing) das „Herausschneiden” von beliebigen Teilstrings:

>>> s = "Ein grüner Fisch singt nie schräg!" >>> s[4:10] # von Position 4 (inklusive) bis Position 10 (exklusive) 'grüner' >>> s[-7:] # von Position -7 bis zum Ende des Strings 'schräg!' >>> s[:16] # von Anfang bis zur Position 16 'Ein grüner Fisch'

Finden von Teilstrings in Strings:

>>> s = "A horse, a horse! " >>> s += "My kingdom for a horse!" >>> s 'A horse, a horse! My kingdom for a horse!' >>> s.find("horse") 2 >>> s.find("horse", 3) 11 >>> s.find("horse", 16) 35 >>> s.find("horse", 36) -1 >>> s.rfind("horse") # Suche beginnt von hinten 35

Die Methode index liefert die gleichen Ergebnisse, außer wenn der Suchstring nicht im String vorkommt:

>>> s.index("horse") 2 >>> s.index("horse", 3) 11 >>> s.index("cow") Traceback (most recent call last): File "", line 1, in ValueError: substring not found

Ein String kann mit Methode auch in eine Liste von Teilstrings aufgespaltenwerden. Ohne Parameter dient jede Folge von Leerzeichen (auch , , usw. sind Leerzeichen) als Trenner. Wird ein String als Parameter übergeben, wird dieser als Trenner verwendet. Außerdem kann man noch einen weiteren Parameter übergeben, mit dem man die Anzahl der zu spaltenden Teilstrings angeben kann:

>>> s = "The is \n a\tstring." >>> s.split() ['The', 'is', 'a', 'string.'] >>> t = "34,12.3,90,0,,1" >>> t.split(",") ['34', '12.3', '90', '0', '', '1'] >>> t.split(",", 2) ['34', '12.3', '90,0,,1'] >>> t.split(",", maxsplit=2) ['34', '12.3', '90,0,,1'] >>> t.split(sep=",", maxsplit=2) ['34', '12.3', '90,0,,1'] >>> s.split(maxsplit=2) ['The', 'is', 'a\tstring.'] >>> # aufspalten von hinten: ... >>> t.rsplit(sep=",", maxsplit=2) ['34,12.3,90,0', '', '1'] >>> s.rsplit(maxsplit=2) ['The is', 'a', 'string.']

Mit den Methoden , und ist es möglich, Leerzeichen oder auch andere Zeichen vom linken bzw. rechten Rand eines Strings oder beidseitig zu entfernen:

>>> s = "\n2000 Hamburg\r\n" >>> s.strip() '2000 Hamburg' >>> s.strip("\n\r0123456789 ") 'Hamburg' >>> s.rstrip() '\n2000 Hamburg' >>> s.lstrip() '2000 Hamburg\r\n'
3.1.3 Listen

Listen werden mittels eckiger Klammern in Python erzeugt. Eine Liste kann beliebige Python-Objekte enthalten, die durch Komma getrennt sind:

>>> lst = ["rot", "grün", "blau"] >>> lst2 = ["rot", 12, [3, 6.78]]

Auf Listenelemente kann man wie bei Strings über Indices zugreifen oder man greift auf mehrere Listenelemente mit dem Teilbereichsoperator zu. Außerdem können wir mittels Indizierung der Liste auch neue Werte zuweisen:

>>> lst = ["rot", 12, "gelb", 123, [3, "Noch ein String"]] >>> lst[0] 'rot' >>> lst[4] [3, 'Noch ein String'] >>> lst[4][1] 'Noch ein String' >>> lst[1:4] [12, 'gelb', 123] >>> lst[0] = "orange" >>> lst ['orange', 12, 'gelb', 123, [3, 'Noch ein String']]

Wir können prüfen, ob ein Element in einer Liste vorhanden ist:

>>> farben = ["rot", "grün", "blau", "gelb"] >>> "rot" in farben True >>> "braun" in farben False >>> "grau" not in farben True

Anhängen von Objekten an Listen:

>>> farben = ["rot", "grün", "blau", "gelb"] >>> farben.append("silber") >>> farben ['rot', 'grün', 'blau', 'gelb', 'silber']

Kopieren und Konkatenieren von Listen:

>>> farben1 = ["rot", "grün"] >>> farben2 = ["blau", "gelb"] >>> farben = farben1 + farben2 >>> farben ['rot', 'grün', 'blau', 'gelb'] >>> >>> farben1 = ["rot", "grün"] >>> farben2 = ["blau", "gelb"] >>> farben = farben1.copy() >>>...

 

© 2009-2019 ciando GmbH