Python Listen Indizes
-
- Beiträge: 939
- Registriert: 16.02.2009 09:35:10
Python Listen Indizes
Ich lerne gerade etwas Python und die Listenverarbeitung irritiert mich gerade. Warum das erste Element 0 ist, wie auch in vielen anderen Programmiersprachen, ist mir natürlich klar (Speicheradressierung).
Mit negativen Indizes die Elemente vom Ende der Liste aus zu adressieren finde ich geschickt. Allerdings hat, und das ist jetzt völlig inkonsistent, das letzte Element den Index -1 statt -0.
Natürlich gibt es -0 mathematisch gar nicht und es gibt somit auch keine Integer Repräsentation von -0. Aber da hätte ich gedacht, dass der Python Interpreter am - erkennt, dass ich auf das Ende der Liste zugreifen will. Er sieht den Index aber als Vorzeichen behafteten Integer.
Da das Minus also immer als Vorzeichen interpretiert wird hätte ich mir an der Stelle lieber eine andere Index-Signatur für die Liste von hinten gewünscht, die genauso Null basiert ist als wenn man die Liste von vorne durchläuft. Gibt es so etwas?
Mit negativen Indizes die Elemente vom Ende der Liste aus zu adressieren finde ich geschickt. Allerdings hat, und das ist jetzt völlig inkonsistent, das letzte Element den Index -1 statt -0.
Natürlich gibt es -0 mathematisch gar nicht und es gibt somit auch keine Integer Repräsentation von -0. Aber da hätte ich gedacht, dass der Python Interpreter am - erkennt, dass ich auf das Ende der Liste zugreifen will. Er sieht den Index aber als Vorzeichen behafteten Integer.
Da das Minus also immer als Vorzeichen interpretiert wird hätte ich mir an der Stelle lieber eine andere Index-Signatur für die Liste von hinten gewünscht, die genauso Null basiert ist als wenn man die Liste von vorne durchläuft. Gibt es so etwas?
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
-
- Beiträge: 2049
- Registriert: 18.03.2012 21:13:42
- Lizenz eigener Beiträge: GNU Free Documentation License
Re: Python Listen Indizes
Ich kenne Python nicht so gut, aber bestimmt laesst sich da etwas ueberschreiben [1]. Allerdings solltest du dir die Frage stellen, was du den Lesern deines Skriptes zumutest
[1] http://stackoverflow.com/questions/1603 ... ived-class
[2] http://stackoverflow.com/questions/1957 ... e-operator
[1] http://stackoverflow.com/questions/1603 ... ived-class
[2] http://stackoverflow.com/questions/1957 ... e-operator
Hilf mit unser Wiki zu verbessern!
Re: Python Listen Indizes
Das wird gar nicht so einfach. -0 hinschreiben geht ja noch. Aber wie machst du das programmatisch? Nehmen wir an, du subtrahierst zwei Zahlen um den Index herauszufinden. Wann wird die negative, wann die positive 0 genommen?nudgegoonies hat geschrieben: Natürlich gibt es -0 mathematisch gar nicht und es gibt somit auch keine Integer Repräsentation von -0. Aber da hätte ich gedacht, dass der Python Interpreter am - erkennt, dass ich auf das Ende der Liste zugreifen will. Er sieht den Index aber als Vorzeichen behafteten Integer.
Vielleicht hilft dir auch folgendes Diagramm.
Code: Alles auswählen
+---+---+---+---+---+
| H | e | l | l | o |
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1
Python dazu:
One way to remember how slices work is to think of the indices as pointing between characters, with the left edge of the first character numbered 0.
Zuletzt geändert von Liffi am 29.04.2017 16:12:34, insgesamt 1-mal geändert.
Re: Python Listen Indizes
Eigentlich ist’s mit den negativen Indices logisch, alles Andere würde unbeteiligte Entwickler nur verwirren. Aber wenn man drauf besteht, könnte man sich sicher was aus ’nem Dictionary zurechtschnitzen ….
- jph
- Beiträge: 1081
- Registriert: 06.12.2015 15:06:07
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Greven/Westf.
Re: Python Listen Indizes
0 ist vorzeichenlos. +0 gibt es genauso wenig wie -0.nudgegoonies hat geschrieben:Natürlich gibt es -0 mathematisch gar nicht und es gibt somit auch keine Integer Repräsentation von -0?
-
- Beiträge: 140
- Registriert: 29.01.2013 11:03:50
Re: Python Listen Indizes
Mathematisch mag das stimmen, in der IEEE 754 Repräsentation gibt es aber sowohl -0.0 als auch +0.0. Daraus ließe sich mit __getitem__ bestimmt etwas basteln. Dazu raten würde ich aber trotzdem nicht.jph hat geschrieben:0 ist vorzeichenlos. +0 gibt es genauso wenig wie -0.nudgegoonies hat geschrieben:Natürlich gibt es -0 mathematisch gar nicht und es gibt somit auch keine Integer Repräsentation von -0?
Re: Python Listen Indizes
Wobei das erstmal nicht wie Integer wirken. Und mit Fließkommazahlen als Indizes oder auch als Schlüssel in Dictionaries kommt man in die Hölle .ChronoBoost hat geschrieben: Mathematisch mag das stimmen, in der IEEE 754 Repräsentation gibt es aber sowohl -0.0 als auch +0.0. Daraus ließe sich mit __getitem__ bestimmt etwas basteln. Dazu raten würde ich aber trotzdem nicht.
-
- Beiträge: 939
- Registriert: 16.02.2009 09:35:10
Re: Python Listen Indizes
Erst mal vielen Dank für alle eure Antworten
Dein Diagramm hat mir geholfen zu verstehen wie es in Python gedacht ist. In Hinblick auf die Asymetrie der Integer ist der Ansatz komplett logisch. Aber erwartungskonform ist er definitiv nicht. In allen Büchern über Programmiersprachen wird erklärt, warum Indizes immer mit 0 anfangen. Und beim Rückwärtszugriff in Python hat man dann schon die erste Ausnahme
Das wäre in der Tat vom Grundsatz her schon verwirrend. Vor allem, da es sich um einen Standard in Python handelt.cronoik hat geschrieben:Ich kenne Python nicht so gut, aber bestimmt laesst sich da etwas ueberschreiben [1]. Allerdings solltest du dir die Frage stellen, was du den Lesern deines Skriptes zumutest
Vergessen wir hier mal kurz das Minus. Rechnerei mit dem Index finde ich verwirrend, wenn durch das Vorzeichen des Ergebnisses festgelegt wird, dass Elemente von vorne oder von hinten aus der Liste genommen werden. Auch wenn es dafür sicher Anwendungsfälle gibt. Mir geht es eher darum, wie ich festlege, ob ich von vorne oder von hinten auf die Liste zugreife. Theoretisch sollte man die Zugriffsmethode, ob von vorne oder von hinten, anders festlegen. Dann könnte man vorwärts wie rückwärts vorzeichenlose Integer, und vor allem beide nullbasiert, benutzen. Meine Idee mit dem -0 war in der Hinsicht falsch, dass vorzeichenbehaftete Integer asymmetrisch abgelegt sind.Liffi hat geschrieben: Das wird gar nicht so einfach. -0 hinschreiben geht ja noch. Aber wie machst du das programmatisch? Nehmen wir an, du subtrahierst zwei Zahlen um den Index herauszufinden. Wann wird die negative, wann die positive 0 genommen?
Dein Diagramm hat mir geholfen zu verstehen wie es in Python gedacht ist. In Hinblick auf die Asymetrie der Integer ist der Ansatz komplett logisch. Aber erwartungskonform ist er definitiv nicht. In allen Büchern über Programmiersprachen wird erklärt, warum Indizes immer mit 0 anfangen. Und beim Rückwärtszugriff in Python hat man dann schon die erste Ausnahme
Ich frage mich ob das Absicht war, die -0.0 auch zu definieren. Den Ansatz Fließkommazahlen als Indizes zu verwenden verstehe ich. Aber ich fürchte da gilt das selbe wie für das was cronoik geschrieben hat.ChronoBoost hat geschrieben:Mathematisch mag das stimmen, in der IEEE 754 Repräsentation gibt es aber sowohl -0.0 als auch +0.0. Daraus ließe sich mit __getitem__ bestimmt etwas basteln. Dazu raten würde ich aber trotzdem nicht.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Re: Python Listen Indizes
Ganz besonders irrekreative Programmierer definieren sich Konstanten MINUS_NULL MINUS_EINS ff. und benutzen dann die beim Zugriff.
Edit: Bevor das einer falsch interpretiert: Man sollte sich mit der -1 abfinden. Obiges ist Schwachfug.
Edit: Bevor das einer falsch interpretiert: Man sollte sich mit der -1 abfinden. Obiges ist Schwachfug.
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
Windows ist doof, Linux funktioniert nicht • Don't break debian! • Wie man widerspricht
-
- Beiträge: 939
- Registriert: 16.02.2009 09:35:10
Re: Python Listen Indizes
Ok, dann fasse ich mal zusammen:
Indizes mit 0 zu beginnen statt 1 hat in der Informatik historische Gründe aufgrund des Speicherzugriffs. Klingt blöd, ist aber so
Rückwärts-Indizes dann aber mit -1 zu beginnen hat in der Informatik technische Gründe aufgrund des Integer-Bitlayouts. Klingt blöd, ist aber so
Informatik ist wie Doppelkopf - es gibt mehr Ausnahmen als Regeln
Indizes mit 0 zu beginnen statt 1 hat in der Informatik historische Gründe aufgrund des Speicherzugriffs. Klingt blöd, ist aber so
Rückwärts-Indizes dann aber mit -1 zu beginnen hat in der Informatik technische Gründe aufgrund des Integer-Bitlayouts. Klingt blöd, ist aber so
Informatik ist wie Doppelkopf - es gibt mehr Ausnahmen als Regeln
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.
Re: Python Listen Indizes
Ich finde das eigentlich perfekt logisch und kann mir zudem nicht recht vorstellen, wie man auf andere Weise sinnvoll damit rechnen sollte. 0 ist das erste Element, 1 also das Zweite und -1 das vor dem Ersten, also das Letzte.
Re: Python Listen Indizes
Was allerdings sehr stark von der Programmiersprache abhängt.niemand hat geschrieben:0 ist das erste Element, 1 also das Zweite und -1 das vor dem Ersten, also das Letzte.
Fortran und Pascal fangen bei 1 an zu zählen, C/C++ fängt bei 0 an.
-1 ist im Falle von C/C++ nicht das letzte Element sondern ausschließlich das vor dem ersten.
Re: Python Listen Indizes
Naja. Wenn man bei 1 anfängt zu zählen kann man das letzte Element nicht mehr adressieren. (8 Bit = 0 .. 255 vs. 1 .. 256)Indizes mit 0 zu beginnen statt 1 hat in der Informatik historische Gründe aufgrund des Speicherzugriffs. Klingt blöd, ist aber so
Ich glaube die 0 wird unterschätzt. Vor allem in der Mathematik der ersten Klasse der Grundschule.
Code: Alles auswählen
0 .. 9
10 .. 19
...
90 .. 99
100 ..
Code: Alles auswählen
1 .. 10
11 .. 20
..
91 .. 100
101 ...
Re: Python Listen Indizes
Siehe Threadtitel.Was allerdings sehr stark von der Programmiersprache abhängt.