Schreibweisen für Auswahlen in Python
Auswahlen
Manche Objekte unterstützen auch Auswahlen, mit denen mehrere Einträge auf einmal ausgedrückt werden können. Die Argumente von »slice« sind: Startwert (einschließlich), Deckel oder Boden (=exklusiver Endwert) und Schrittweite.
- Protokoll
import operator
operator.getitem( 'abcdefghi', slice( 3, 6 ))
'def'
Oben wurden die numerierten Stellen von 3 (einschließlich) bis 6 (ausschließlich) ausgewählt.
- Protokoll
operator.getitem( 'abcdefghi', slice( 6, 3, -1 ))
'gfe'
operator.getitem( 'abcdefghi', slice( 2, 8, +2 ))
'ceg'
Negative Positionen werden vom Ende her gezählt.
- Protokoll
import operator
getitem( 'abcdefghi', slice( -1, -4, -1 ))
'ihg'
Auswahlen als Indizes
Ein Aufruf des Funktors ›slice‹ ergibt ein Auswahlobjekt, das dem Funktor ›getitem‹ wie ein Index übergeben werden kann.
- Protokoll
import operator
operator.getitem( 'abcdefghi', slice( 3, 6 ))
'def'
Das Auswahlobjekt kann entsprechen auch in eckigen Klammern übergeben werden.
- Protokoll
'abcdefghi'[ slice( 3, 6 )]
'def'
Kurzschreibweise für Auswahlen
In den eckigen Klammern können Auswahl auch einfach durch ihre Bestimmungsgrößen angegeben werden, wenn diese durch einen Doppelpunkt »:« getrennt werden.
- Auswahl „von drei bis sechs“
"abcdefghi"[ 3: 6 ]
'def'
Man kann »3: 6« als „von drei bis sechs“ sprechen. In Python ist die Inklusion des unteren und die Exklusion des oberen Wertes der Normalfall, so daß dies nicht immer dazu gesagt werden muß, wenn schnell kommuniziert werden soll.
Der Doppelpunkt »:« ist nicht mit dem Komma »,« zu verwechseln!
- Konsolenprotokoll
"abcdefghi"[ 3, 6 ]
TypeError: string indices must be integers
Asymmetrische Intervallangaben
Der Vorteil der asymmetrischen Intervallangaben (Intervallangabe, deren zweiter Wert nicht mehr dazugehört) besteht darin, daß die Anzahl der Einträge die Differenz von End- und Startwert ist.
- Konsolenprotokoll
"abcdefghi"[ 4: 6 ]
'ef'
- Konsolenprotokoll
len( "abcdefghi"[ 4: 6 ])
2
- Konsolenprotokoll
6 - 4
2
Umgekehrt kann die Länge direkt als zweiter Wert verwendet werden, wenn „bis zum Ende“ gemeint ist.
- Konsolenprotokoll
s = "abcdefghi"
s[ 0: len( s )]
'abcdefghi'
Ein weiterer Vorteil der asymmetrischen Intervallangaben besteht darin, daß bei einer Verkettung ohne Lücke der zweite Wert der ersten Angabe als erster Wert der zweiten Angabe verwendet werden kann.
- Konsolenprotokoll
s = "abcdefghi"
s[ 0: 6 ]+ s[ 6: len( s )]
"abcdefghi"
Negative Werte
Negative Werte zählen von hinten.
- Konsolenprotokoll
"abcdefghi"[ -4: -2 ]
'fg'
Weggelassene Werte
Fehlt der erste Wert, so gibt es keine untere Grenze.
- Auswahl „bis minus Eins“
"abcdefghi"[ :-1 ]
'abcdefgh'
Fehlt der letzte Wert, so gibt es keine obere Grenze.
- Auswahl „ab Vier“
"abcdefghi"[ 4: ]
'efghi'
Fehlen alle Werte, so ergibt sich also wieder das Original (nicht unbedingt immer dasselbe Objekt, aber wenigstens eine Kopie mit den gleichen Werten).
- Konsolenprotokoll
[ 4, 2, 7 ][ : ]
[4, 2, 7]
Schrittweiten
Auch die Angabe einer Schrittweite ist möglich.
- Konsolenprotokoll
operator.getitem( "abcdefghi", slice( 3, 6, 2 ))
'df'
Die Schrittweite wird nach einem weiteren Doppelpunkt angegeben.
- Konsolenprotokoll
"abcdefghi"[ 3: 6: 2 ]
'df'
Bei Verwendung eines negativen Wertes für die Schrittweite erfolgt das Durchlaufen in die umgekehrte Richtung.
- Konsolenprotokoll
"abcdefghi"[ -1: : -1 ]
'ihgfedcba'
Unerfüllbare Auswahlen
Es ist erlaubt, Bereiche auszuwählen, die in einer Sequenz gar nicht vorkommen. Dann wird die Auswahl nur in soweit erfüllt, wie dies möglich ist.
- Konsolenprotokoll
"abcdefghi"[ :2 ]
'ab'
- Konsolenprotokoll
"a"[ :2 ]
'a'
- Konsolenprotokoll
""[ :2 ]
''
Dies ist anders als bei der Indizierung ohne Doppelpunkt »:«, wo die Verwendung einer Kennzahl ohne Bindungsstelle als Fehler gilt.
- Konsolenprotokoll (gekürzt und übersetzt)
"a"[ 2 ]
IndexFehler: Zeichenfolgenindex außerhalb des zulässigen Bereichs
Übungsfragen
? Auswahlen
Wie schreibt man in Python:
- die beiden ersten Zeichen eines Strings? – Musterantwort: „[ :2 ]“, gesprochen „Doppelpunkt Zwei“.
Wie schreibt man in Python:
- das letzte Zeichen eines Strings?
- die beiden letzten Zeichen eines Strings?
- einen String ohne sein erstes und letztes Zeichen?