Seite 1 von 1

Listen Index Verständnisfrage zu [start:ende]

Verfasst: Montag 11. März 2019, 15:34
von Fiffio
Hallo,

eine Anfänger Verständnisfrage:
Listenindex für das erste Element ist [0].
Bei Kofler "Python Der Grundkurs" wird erklärt, das die Startposition inklusive und die Endposition aber exklusive ist [start:ende].

Code: Alles auswählen

Liste = ["A", "B", "C", "D"]
Liste = [1:2]   # ["B"]
Warum hat man das Prinzip für Startposition und Endposition unterschiedlich festgelegt?
Warum für Startposition und Endposition nicht beide inklusive?
Also so:

Code: Alles auswählen

Liste = ["A", "B", "C", "D"]
Liste = [1:2]   # ["B","C"]
Wenn man sagt: Listenindex für das erste Element ist [0]. Müsste man doch eigentlich hinzufügen, dass dies bei [start:ende] nur für die Startposition gilt. Für die Endposition (ende) gilt [1].
Das verwirrt mich. :?

Re: Listen Index Verständnisfrage zu [start:stop]

Verfasst: Montag 11. März 2019, 15:55
von Sirius3
Donald Knuth hat das mal schön hergeleitet, ich finde nur nicht mehr seinen Artikel. (Der ist es nicht: https://xkcd.com/163/)
Hier eine abgeleitete Abhandlung des Themas: https://news.ycombinator.com/item?id=6601515

Re: Listen Index Verständnisfrage zu [start:ende]

Verfasst: Montag 11. März 2019, 16:08
von Fiffio
Ja, der 2. Link hilft weiter. :)
"I (0-indexing) think of them as the following:"

Code: Alles auswählen

      |-|-|-|...|-|
      ^           ^
    first   past-the-end
   position
   
      |-|-|-|...|-|
       ^         ^
    first      last
   element    element

Re: Listen Index Verständnisfrage zu [start:ende]

Verfasst: Montag 11. März 2019, 16:26
von /me
Fiffio hat geschrieben: Montag 11. März 2019, 15:34 Bei Kofler "Python Der Grundkurs" wird erklärt, das die Startposition inklusive und die Endposition aber exklusive ist [start:ende].

Code: Alles auswählen

Liste = ["A", "B", "C", "D"]
Liste = [1:2]   # ["B"]
Warum hat man das Prinzip für Startposition und Endposition unterschiedlich festgelegt?
Wenn du Teilbereiche nimmst bekommst du nichts doppelt.

Code: Alles auswählen

>>> data = ['a', 'b', 'c', 'd']
>>> result = data[0:2] + data[2:4]
>>> result
['a', 'b', 'c', 'd']

Re: Listen Index Verständnisfrage zu [start:ende]

Verfasst: Montag 11. März 2019, 17:05
von Fiffio
/me hat geschrieben: Montag 11. März 2019, 16:26 Wenn du Teilbereiche nimmst bekommst du nichts doppelt.

Code: Alles auswählen

>>> data = ['a', 'b', 'c', 'd']
>>> result = data[0:2] + data[2:4]
>>> result
['a', 'b', 'c', 'd']
Ja, aber es gibt keinen Index Nr. 4.

Code: Alles auswählen

    print(result[4])

IndexError: list index out of range
Und wenn man brav gelernt hat "Listenindex für das erste Element ist [0]", dann ist der Anfänger irritiert, wenn plötzlich eine Zahl in den eckigen Klammern auftaucht, die im Index nicht existiert. Aber jetzt ist es mir verständlicher, weil für Startposition und Endposition [start:ende] unterschiedliche Regeln gelten.

Re: Listen Index Verständnisfrage zu [start:ende]

Verfasst: Montag 11. März 2019, 17:23
von Sirius3
Falsch gedacht. Es existieren verschiedene Regeln für Indexzugriff und Bereiche (Slices)

Re: Listen Index Verständnisfrage zu [start:ende]

Verfasst: Dienstag 12. März 2019, 04:08
von snafu
Etwas weniger Hirnschmalz braucht es übrigens, wenn Slicing unmittelbar den Anfang oder das Ende mit einbezieht. Denn dann kann man die Endposition weglassen und es liest sich somit etwas leichter. Diese Situation hat man nicht immer, aber häufig.

Ausgabe aus der Python-Shell:

Code: Alles auswählen

>>> 'foobar'[:3]  # Die ersten 3
'foo'
>>> 'foobar'[-3:]  # Die letzten 3
'bar'
In anderen Fällen muss man leider damit leben, dass sozusagen um eins versetzt gedacht werden muss...

Re: Listen Index Verständnisfrage zu [start:ende]

Verfasst: Dienstag 12. März 2019, 07:11
von ThomasL
snafu hat geschrieben: Dienstag 12. März 2019, 04:08 In anderen Fällen muss man leider damit leben, dass sozusagen um eins versetzt gedacht werden muss...
und manchmal hilft es auch in anderen Bereichen des Lebens "um eins versetzt" zu denken ..... :geek: :D :lol: