Seite 1 von 1

Ausschneiden aus Liste/Vektor - zweiter Index

Verfasst: Donnerstag 20. Februar 2020, 14:51
von kpot
Hallo:
Ich arbeite mich (wieder, nach längerer Zeit) in Python-3 ein.
Zu folgendem Code hätte ich keine Verständnisfrage, sondern eine Frage, WARUM man die Bedeutung des zweiten Index so seltsam gewählt hat:

Der Code:
x = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
y = x[3 : 6] # WARUM muss man hier einen um 1 höheren Wert angeben ???
print(x)
print(y)
Die Ausgabe:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
['d', 'e', 'f']

1) Ich will die Buchstaben d, e und f ausschneiden und der Variablen y zuweisen.
2) Da die Indexzählung mit 0 beginnt, muss logischerweise der erste Index 3 lauten. Soweit so gut und alles klar.
3) ABER: Der Index für den Buchstaben f ist nun ja 5 (fünf). Im Code muss aber 6 angegeben werden. # Intuitiv hätte ich erwartet, [3 : 5] schreiben zu müssen.

Meine Gretchenfrage:
Weiß irgend Jemand, warum das in Python so (seltsam) implementiert wurde ???
Mir scheint das nicht besonders intuitiv zu sein (insbesondere, wenn ich es mit anderen Programmiersprachen vergleiche).
Die Implementierer müssen sich dabei ja irgend etwas gedacht haben - und das hätte ich gerne gewusst, welchen besonderen Zweck man damit erreichen wollte.

In Lehrbüchern findet man bei solchen Beispielen z.B. folgenden Code:
y = x[3:6] # Erster Index ist inklusive, zweiter Index ist exklusive zu verstehen.

Mit freundlichen Grüßen
kurt
# Würde mich über jede plausible Antwort freuen.

Re: Ausschneiden aus Liste/Vektor - zweiter Index

Verfasst: Donnerstag 20. Februar 2020, 15:36
von Sirius3
Inituition ist für jeden etwas anderes.

https://www.xkcd.com/163/

http://www.cs.utexas.edu/users/EWD/tran ... WD831.html

Zusammengefasst: es läuft auf die Frage hinaus, wie man eine leeren Slice definieren will `x[3:3]`.

Re: Ausschneiden aus Liste/Vektor - zweiter Index

Verfasst: Donnerstag 20. Februar 2020, 15:41
von __deets__
Die Indizes kann man sich konzeptionell als die Positionen ZWISCHEN den Elementen vorstellen. Also

Code: Alles auswählen

[   a,    b,   c,    d   ]
  0    1     2    3   4
Die sind also unter dieser Betrachtung nicht seltsam, sondern konsistent gewaehlt. Und so kannst du mit zwei Zahlen *JEDEN* Ausschnitt abdecken, ohne einen Sonderfall zu kreieren, den dein Vorgehen erzeugt: wie schneidest du denn ein leeres Stueck aus der Liste aus? Mit einem Bereich (i, i) ist das in Python darstellbar. Bei dir ist das aber gleich eine ein-Elementige Liste, du musst also (i, i, True) oder (i, i, False) oder aehnliches nutzen, um zu kommunizieren, dass etwas ein leerer Ausschnitt ist. Ein netter Nebeneffekt ist, dass Ende - Anfang immer die anzahl der Elemente liefert. Bei dir ist 3 - 3 == 0, und man muss also gedanklich eine 1 addieren.

Re: Ausschneiden aus Liste/Vektor - zweiter Index

Verfasst: Donnerstag 20. Februar 2020, 16:02
von kpot
Hallo:

- ... es läuft auf die Frage hinaus, wie man eine leeren Slice definieren will `x[3:3]`.
- ... dass Ende - Anfang immer die anzahl der Elemente liefert. Bei dir ist 3 - 3 == 0, und man muss also gedanklich eine 1 addieren.

[b]Beide Antworten gefallen mir! [/b]Das wars auch schon wieder.
DANKE für den Denkanstoß - kurt