In [ ]:
satz = 'Ein String ist eine Zeichenkette.'
len(satz)
In [ ]:
# Für die folgenden Beispiele ist ein kurzer String übersichtlicher
satz = "Ein String"
satz[0]
In [ ]:
Durch Angabe zweier, durch einen Doppelpunkt getrennter Werte (Index des ersten herauszuschneidenden und des ersten nicht mehr herauszuschneidenden Elements) kann man aus einem String einen Teilstring extrahieren:
In [ ]:
satz[0:3]
Ist der erste Wert 0
, kann dieser weggelassen werden:
In [ ]:
satz[:3]
Wird der zweite Wert weggelassen, ist das gleichbedeutend mit "bis zum Ende des Strings":
In [ ]:
satz[3:]
In [ ]:
satz[len(satz)-1]
In Python gibt es dazu eine elegante Alternative: Man kann negative Zahlen verwenden, um von hinten her auf einzelne Zeichen zuzugreifen:
Das letzte Zeichen des Strings hat als den Index -1
, das vorletzte -2
usw.
In [ ]:
satz[-1]
In [ ]:
output = ('Dein Name ist {} und besteht aus {} Zeichen. '
'Er beginnt mit {} und endet mit {}. Von hinten gelesen lautet er {}.')
In [ ]:
for char in satz:
print(char)
Dieses Konstrukt (for Element in Sequenz
) funktioniert für alle Datentypen, die in der Lage sind, ein Element nach dem anderen zu liefern. Man spricht hier von einem Iterable. Solche Iterables sind in Python zahlreich, so dass auf diese Weise nicht nur durch die Zeichen eines Strings, sondern beispielsweise auch durch die Elemente einer Liste, die Zeilen einer Datei oder einfach nur durch eine Abfolge von Zahlen iteriert werden kann:
In [ ]:
for i in range(1, 11):
print(i)
In [ ]:
In [ ]:
for i in range(1, 11):
for j in range(1, 11):
print('{} x {} = {}'.format(j, i, i * j))
In [ ]:
fh = open('data/vornamen/names_short.txt')
Falls nötig, kann noch das Encoding der Datei explizit angegeben werden:
In [ ]:
fh = open('data/vornamen/names_short.txt', encoding='utf-8')
Wenn wir die Datei nicht mehr brauchen, sollte sie wieder geschlossen werden, damit das Betriebssystem die Ressource wieder freigeben kann.
In [ ]:
fh.close()
Das Objekt, das die geöffnete Datei repräsentiert, bietet mehrere Möglichkeiten um auf den Inhalt
zuzugreifen, darunter auch einen Iterator, den wir in einer for
-Schleife nutzen können.
In [ ]:
fh = open('data/vornamen/names_short.txt', encoding='utf-8')
for line in fh:
print(line)
fh.close()
Es ist guter Stil, eine geöffnete Datei auch wieder zu schließen. Wenn aber z.B. das Programm abstürzt, während die Datei geöffnet ist, kann die close()
-Methode nicht mehr ausgeführt werden. Um solche Probleme zu vermeiden, empfiehlt sich die Verwendung eines Context-Managers:
In [ ]:
with open('data/vornamen/names_short.txt', encoding='utf-8') as fh:
for line in fh:
print(line)
In [ ]:
with open('data/vornamen/names_short.txt', encoding='utf-8') as fh:
data = fh.read()
print(data)
In [ ]:
with open('data/vornamen/names_short.txt', encoding='utf-8') as fh:
data = fh.readlines()
print(data)
In [ ]:
In [ ]:
students = ['Otto', 'Anna', 'Maria', 'Franz']
students
In [ ]:
temperatures = [25, 28, 20, 26, 32]
temperatures
In [ ]:
len(students)
In [ ]:
students[0]
In [ ]:
students[1:3]
In [ ]:
print(students)
students.append('Otto')
print(students)
Wir können aber auch Elemente an beliebiger Position einfügen:
In [ ]:
students.insert(0, 'Berta')
students
Ebenso können wir Elemente wieder entfernen. Die Methode pop()
entfernt das letzte Element der Liste.
In [ ]:
next_student = students.pop()
print(next_student)
print(students)
pop()
kann aber auch optional mit einem Argument aufgerufen werden: einer Zahl die dem Index des zu entfernenden Objekts entspricht:
In [ ]:
first = students.pop(0)
print(first)
students
In [ ]:
print(students)
students[1] = 'Berta'
print(students)
In [ ]:
with open('data/vornamen/names_short.txt', encoding='utf-8') as fh:
lines = fh.readlines()
print(len(lines))
Wir haben gesehen, dass eine Liste beliebige Typen enthalten kann. Dazu gehören auch Listen. Wir können also auch eine Liste von Listen erzeugen. Stellen wir uns vor, wir messen drei Mal täglich die Temperatur und möchten diese speichern. Am ersten Tag haben wir diese 3 Messungen: [17, 28, 24]
. Am zweiten Tage messen wird diese Werte [18, 31, 28]
. Wir haben also eine Liste pro Tag. Die einzelnen Tage (sprich: Listen) können wir wieder in ein Liste speichern:
In [ ]:
temperatures = [
[17, 28, 24],
[18, 31, 28],
[20, 35, 29]
]
Wir können uns diese Temperaturen als Tabelle vorstellen: Jede Zeile repräsentiert einen Tag, jede Spalte einen Meßzeitpunkt (z.B. 6:00, 12:00, 18:00). Wie wir auf die Messwerte eines bestimmten Tages zugreifen können, haben wir schon gelernt:
In [ ]:
temperatures[1]
Da das gewählte Element wieder eine Liste ist, können wir auch auf einzelne Element zugreifen. Den ersten Messwert des zweiten Tages erhalten wir so:
In [ ]:
temperatures[1][0]
In [ ]:
max(temperatures[0])
In [ ]:
In [ ]:
with open('data/vornamen/names_short.txt', encoding='utf-8') as fh:
lines = fh.readlines()
print(lines)
In [ ]:
s = 'abc\n'
s.rstrip()
rstrip()
entfernt allen Whitespace (Leerzeichen, Tabulaturen, Zeilenumbrüche etc.) am Ende einen Strings. Zusätzlich gibt es noch lstrip()
, das Whitespace am Anfang eines Strings entfernt, und strip()
, das Whitespace links und rechts entfernt.
In [ ]:
s = ' abc '
print('rstrip: "{}"'.format(s.rstrip()))
print('lstrip(): "{}"'.format(s.lstrip()))
print('strip(): "{}"'.format(s.strip()))
In [ ]:
clean_names = []
for line in lines:
clean_names.append(line.rstrip())
print(clean_names)
Damit haben wir auch schon die erste Listen-Methode kennengelernt, die es bei Strings (die unveränderbar sind) nicht gibt: Mit list.append(WERT)
können wir der Liste einen weiteren Wert hinzufügen. Dieser Wert wird hinten an die Liste angefügt:
In [ ]:
queue = ['Anna', 'Hans', 'Berta']
queue.append('Dora')
queue
In [ ]:
clean_names = [line.rstrip() for line in lines]
print(clean_names)
In [ ]:
nums = [4, 9, 17, 5, 99]
# TODO: fertig machen
In [ ]: