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.
Ausschneiden aus Liste/Vektor - zweiter Index
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]`.
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]`.
Zuletzt geändert von Sirius3 am Donnerstag 20. Februar 2020, 15:41, insgesamt 1-mal geändert.
Die Indizes kann man sich konzeptionell als die Positionen ZWISCHEN den Elementen vorstellen. Also
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.
Code: Alles auswählen
[ a, b, c, d ]
0 1 2 3 4
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
- ... 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