14.7. Zeichenketten - str#

Eine Zeichenkette (engl. String) str ist eine Sequenzen von Zeichen. Wie ein Tupel, ist auch eine Zeichenkette unveränderlich (engl. immutable). So kann eine Zeichenkette als ein besonderes Tupel, welches nur Zeichen enthält, gedeutet werden.

Python bietet uns viele nützliche Funktionen um auf Zeichenketten zu operieren. Zeichenketten können durch einfache oder doppelte Anführungszeichen umschlossen sein.

text = 'Hello World!'
text = "Hello World!"

Was wir bereits exzessive genutzt haben ist die Ausgabe von Zeichenketten durch die built-in Funktion print.

text = 'Hello World!'
print(text)
Hello World!

Um Variablen oder Werte anderer Datentypen mit print auszugeben, mussten wir diese immer mit der built-in Funktion str in eine Zeichenkette umwandeln. Da dies so häufig gemacht werden muss, haben die Entwickler*innen von Python sich etwas einfallen lassen. Stellen wir vor unsere Zeichenkette ein f, so handelt es sich um eine sog. formatierte Zeichenkette. Diese helfen uns Variablen oder Werte direkt in eine Zeichenkette einzufügen. Vergleichen Sie folgenden Code:

x = 5
y = 10
print('x + y = ' + str(x) + ' + ' + str(y) + ' = ' + str(x+y)) # ugly
print(f'x + y = {x} + {y} = {x+y}')                            # beautiful
x + y = 5 + 10 = 15
x + y = 5 + 10 = 15

Das vereinfacht das Schreiben und Lesen solcher Ausgaben ungemein. Sie können formatierte Zeichenketten auch ohne print verwenden.

x = 5
y = 10
formatted_str = f'x + y = {x} + {y} = {x+y}'
formatted_str
'x + y = 5 + 10 = 15'

Zwei Zeichenketten lassen sich mit dem +-Operator verketten.

prefix = 'Hello'
suffix = ' Welt!'
text = prefix + suffix
print(prefix)
print(suffix)
print(text)
Hello
 Welt!
Hello Welt!

Bestimmte Zeichen kontrollieren die Darstellung des Textes, z.B. ob eine Leerzeile ein Leerzeichen oder ein Tab eingefügt werden soll.

space = ' '
space_line = '\n'

print('Hello' + space + 'World' + space_line + '!')
Hello World
!

Die leere Zeichenkette verändert bei der Verkettung eine andere Zeichenkette nicht. Es ist das neutrale Element der Zeichenverkettung.

empty_str = ''

print('The correct answer is 42!')
print('The correct' + empty_str + empty_str + empty_str + ' answer is 42!')

'Hello' == 'Hello' + empty_str
The correct answer is 42!
The correct answer is 42!
True

Zeichenketten lassen sich wie Listen und Tupel indexieren, Mit der built-in Funktion len, kann man die Länge einer Zeichenkette erfragen. Folgender Code gibt jedes einzelne Zeichen einer Zeichenkette aus.

text = 'Hello World!'

for i in range(len(text)):
  print(text[i])
H
e
l
l
o
 
W
o
r
l
d
!

Das lässt sich jedoch auch einfacher schreiben:

text = 'Hello World!'

for char in text:
  print(char)
H
e
l
l
o
 
W
o
r
l
d
!

Auch bei Zeichenketten können wir negative Indices verwenden. text[-1] gibt uns das letzte und text[-2] das vorletzte Zeichen.

text = 'Zeichensalat'

print(text[-1])
print(text[-2])
t
a

Lassen Sie uns eine Zeichenkette umdrehen:

text = 'Zeichensalat'
reverse_text = ''

for i in range(len(text)):
  reverse_text += text[-(i+1)]

print(text)
print(reverse_text)
Zeichensalat
talasnehcieZ

Genau wie Listen und Tupeln, lassen sich auch Zeichenketten zerschneiden (indexieren).

text = 'Zeichensalat'
print(text[0:2])
print(text[0:len(text)])   # take it all
print(text[0:-3])          # negative indexing
print(text[1:-1])          # skip first and last
print(text[-3:-1])         # negative indexing
print(text[2:])            # skip the first 2 and take the rest
Ze
Zeichensalat
Zeichensa
eichensala
la
ichensalat

Dabei ist text[2:] eine Kurzschreibweise für text[2:len(text)] und text[:2] für text[0:2].

Hin und wieder kann es vorkommen, dass Sie Zeichen schreiben möchten, welche bereits in Python mit einer Bedeutung belegt sind. Wie schreiben wir beispielsweise Anna sagte: 'Wie geht es dir'? Dafür müssen wir das '-Zeichen mit einem \ maskieren:

print('Anna sagte: \'Wie geht es dir\'')
Anna sagte: 'Wie geht es dir'

Zeichenketten sind Objekte die uns viele nützliche Funktionen anbieten. Zu beachten ist, dass Zeichenketten unveränderlich sind, d.h. die Funktionen liefern neue Zeichenkette zurück, die ursprüngliche bleibt unverändert.

Mit text.upper() können wir beispielsweise alle Zeichen einer Zeichenkette in Großbuchstaben transformieren.

text = 'Zeichensalat'
text_upper = text.upper()
print(text)
print(text_upper)
Zeichensalat
ZEICHENSALAT

Wir können die Vorkommnisse eines Zeichen in einer Zeichenkette zählen oder ganze Zeichenfolgen ersetzten:

text = 'Zeichensalat'
print(text.count('a'))
print(text.replace('salat', 'spinat'))
2
Zeichenspinat

Es würde zu weit gehen alle Funktionen zu besprechen – das wäre auch ziemlich langweilig. Schauen Sie sich einfach die Dokumentation an oder verwenden Sie die eingebaute Hilfe help(str).