Ich dachte, dass es begann, rückwärts von Anfang an zu zählen, also ist A 0, B ist -1 und C ist -2.Warum ergibt 'abc' [- 1] 'c' anstatt 'b'?
Antwort
Wie Henry darauf hingewiesen hat, zeigen negative Indizes das Zählen von rechts an.
Natürlich ist A
0
, B
ist 1
und C
2
ist, wenn von links gezählt:
-> -> ->
A | B | C
0 | 1 | 2
beim Rückwärts gehen, -1 wird das Ende des Arrays, etwa so:
<- <- <-
A | B| C
-3|-2|-1
Für mehr Kontext, sieh es so, als ob zwei Kopien aufgereiht wären:
A | B | C | A | B | C
-3| -2| -1| 0 | 1 | 2
Gemäß the documentationString
und List
Objekte unterstützen negative Indizes, aber Range-Objekte nicht.
Anstatt es als "von rechts beginnend" zu betrachten, denke ich, dass es etwas robuster ist, es als den endgültigen Index "Länge + Negativ_Index" zu betrachten. Da die Länge 1 mehr als der letzte Index ist, funktioniert es. Das Problem mit "von rechts anfangen" ist, dass es eine Asymmetrie gibt, die von links (bei 0) und von rechts beginnend (bei [negativ] 1?) Beginnt, was die ursprüngliche Verwirrung von OP zu sein scheint. – mgilson
Ein negativer Index bedeutet "Start von rechts zu zählen".
Um es anders auszudrücken: sequence[0]
ist der Beginn der Sequenz, warum würden Sie sequence[-1]
erwarten etwas anderes als das Ende der Sequenz zu sein?
0 1 2
a b c
-3 -2 -1
a b c
- 1. Warum 'ABC'.replace (' B ',' $ `') ergibt AAC
- 2. In C# warum (char) (1) + (char) (2) ergibt int 3
- 3. Warum verlassen manche Leute -1 anstatt 1 bei einem Fehler?
- 4. "wählen Sie abc aus (wählen Sie 1) als abc" produziert "(1)" anstelle von "1"
- 5. 1/2 ergibt 0.5, aber sqrt (-1) ergibt DomainError
- 6. Warum ("abc" + char.MaxValue) .CompareTo ("abc") == 0?
- 7. Warum der Eingang "abc !!!" aber die Ausgabe ist nicht "abC+++"?
- 8. Fließkomma C++ - Compileroptionen | a/b verhindern -> a * (1/b)
- 9. Warum ist das Callable ABC in den Sammlungen ABC-Modul?
- 10. Warum ergibt dies CS0695?
- 11. Warum ergibt dies einen Segmentierungsfehler?
- 12. Warum ergibt ~ True in -2?
- 13. Warum a [c] a [b] überschreiben?
- 14. Warum Tupel (set ([1, "a", "b", "c", "z", "f"])) == tuple (set (["a", "b", "c") , "z", "f", 1])) 85% der Zeit mit Hash Randomisierung aktiviert?
- 15. Convert Zeichenfolge "abc" zu $ hash -> {a} -> {b} -> {c} in Perl
- 16. Ausgang nur Zeichen zwischen [ABC] und [/ ABC]
- 17. Warum ergibt die Datumsangabe eine Zeichenfolge?
- 18. Assoziativität Mathe: (a + b) + c = a + (b + c)
- 19. Rspec2 Teilansicht ergibt Nil: NilClass. Warum?
- 20. TypeError: b'1 'ist nicht JSON serializable
- 21. Unterschied zwischen zwei regulären Ausdrücken: [abc] + und ([abc]) +
- 22. Subclassing string gibt "0x401bad ABC" anstelle von "Foo ABC"
- 23. Ausgabe des Programms für Benutzereingaben, die entsprechend der Benutzereingabe eine unterschiedliche Länge haben. Eingabe 1 -> abc Eingabe2 -> 'abc'
- 24. Wie `abc` zu` abc'` in Notepad ersetzen ++ Regex mit
- 25. Warum ist 'a' in ('abc') wahr, während 'a' in ['abc] falsch ist?
- 26. Warum ein einfacher String-Vergleich FALSE ergibt?
- 27. Warum ergibt 2 && 3 3 (Javascript)?
- 28. Warum ergibt `` aeee.gsub (/ (ae) * /, 'r') `` rrerer '`?
- 29. Warum produziert ein% b SIGFPE, wenn b Null ist?
- 30. Vereinfachen (a + b) XOR (c + b)
'abc' [0] ist 'a'. 'abc' [1] ist 'b'. 'abc' [2] ist 'c'. Warum sollten Sie erwarten, dass die Zahlen den gleichen Effekt erzeugen? – ApproachingDarknessFish
Nein, es beginnt rückwärts vom Ende zu zählen. – user2357112