IndexError: string index out of range in Python
Mein code gibt mir eine Fehlermeldung besagt, dass der index out of range on line 9. Hier ist mein code:
s = 'aba'
letter = ''
substring = ''
i = 0
while(i <= len(s)):
prev_letter = s[0]
letter = s[i]
if letter <= prev_letter:
substring += letter
prev_letter = letter
i += 1
- entfernen
=
auswhile(i <= len(s)):
- Um zu sehen, warum dies geschieht: Die Zeichenfolge
s = 'a'
hatlen(s) == 1
aber nicht über einen index auf 1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als andere Personen haben angegeben,
s[s.Length]
ist nicht wirklich ein Gültiger index; Indizes werden in der geschlossenes Intervall[0, length - 1]
(d.h. der Letzte gültige index istlength - 1
und der erste index 0 ist). Beachten Sie, dass dies gilt nicht für jeder Sprache (es gibt Sprachen, wo der erste index ist 1), aber es ist sicherlich richtig, für Python.Darüber nachdenken, was ein array ist und wie es umgesetzt: es ist einfach eine Serie von aufeinander folgenden Speicheradressen. Der index ist ein offset von der ersten Speicher-Adresse, nicht der Artikelnummer. Daher ist das erste Element hat einen index von 0 - es gibt keinen offset von der Adresse des ersten Elements (per definition). Allerdings, das 5. Element-Adresse, zum Beispiel, ist
(address of the first item) + (4 * offset size)
. Das ist, warum Sie Zugang zu einem beliebigen Element in einem array in konstanter Zeit. (Dies ist ein "überbleibsel" aus C/C++ Art).Ändern
while(i <= len(s):
zuwhile(i < len(s)):
oderwhile(i <= len(s)-1):
In Python ein string ist ein eindimensionales array von Zeichen. Indizes in der Python-Programmierung bei 0 beginnen. Dies bedeutet, dass die maximale index für alle string immer werden, len(s)-1. In Ihrem code
i
werden schließlich gleichlen(s)
, die ein element höher als die maximale.Als Randnotiz, wäre es wahrscheinlich von Vorteil sein, verwenden Sie eine
for
Schleife anstatt einerwhile
- Schleife in deinem code. Dein code ersetzt werden kann, mit diesem:zero-based
! in dieser finden Sie eine Liste derone-based
Indizierung Sprachen.