Schreibweisen für Auswahlen in Python (Schreibweisen für Auswahlen in Python), Lektion, Seite 724707
https://www.purl.org/stefan_ram/pub/abschnitte_python (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
Python-Kurs

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:

Wie schreibt man in Python:

 

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram724707 stefan_ram:724707 Schreibweisen für Auswahlen in Python Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd724707, slrprddef724707, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/abschnitte_python