2016-09-05 4 views
-1

Okay, ich habe keine Ahnung, was das Problem hier ist. Alles, was ich gelesen habe, adressiert grundsätzlich den nicht endenden Bereich, also den Fehler, aber das macht für mich keinen Sinn, da dies eine feste Schleife ist.IndexError: String-Index außerhalb des Bereichs (enumerate)

Ich versuche einfach, eine Zeichenfolge zu nehmen und jeden Buchstaben einzeln in eine Liste zu schreiben. Was vermisse ich?

>>> name = "Chris" 
>>> 
>>> my_list = [] 
>>> 
>>> for key, value in enumerate(name): 
...  my_list.append(value[key]) 
...  print (my_list) 
... 

Der Fehler Ich erhalte:

['C'] 
Traceback (most recent call last): 
File "<pyshell#7>", line 2, in <module> 
my_list.append(value[key]) 
IndexError: string index out of range 

Antwort

2

Was Ihnen fehlt, ist, dass value ein String einzelnes Element ist. Die Indizierung an den Positionen != 0 führt zu einem IndexError; Während der ersten Iteration passiert das.

Wenn Sie möchten, um es schaffen mit Ihrer for-Schleife, fügen Sie einfach den Wert sofort:

for key, value in enumerate(name): 
    my_list.append(value) 

Natürlich ist enumerate keineswegs hier erforderlich ist, kann dies durch list Aufruf vereinfacht werden und die Zeichenfolge liefern fraglich; Python wird dann eine Liste erstellen, um den Inhalt der Zeichenfolge für Sie enthalten:

my_list = list(name) 

Für Python 3.x können Sie auch mit * in einem list wörtlichen auspacken:

my_list = [*name] 

In allen gelieferten Schnipsel, das Ergebnis Die Operationen sind ['C', 'h', 'r', 'i', 's'] wie erforderlich.

0
name = 'Chris' 
my_list = list(name) 
print(my_list) 

Input: [ 'C', 'h', 'R', 'i', 'S']

Für einen in jeder Zeit:

for letter in name: 
print(letter) 
0

Sie Aufzählen sind über einen String ("Chris"), was bedeutet, dass Schlüssel und Wert die folgenden Werte während der Iteration halten:

0 "C" 
1 "h" 
2 "r" 
3 "i" 
4 "s" 

Wert [key] in der ersten Iteration ist ok, es gibt "C".

In der zweiten Iteration ist der Index 1 außerhalb des Bereichs für die Zeichenfolge "h".

Was möchten Sie wahrscheinlich, dies zu tun ist:

for i, value in enumerate(name): 
    my_list.append(value) 
    print (my_list) 
0

Änderung my_list.append (Wert [key]) (Wert) my_list.append im Code

0

Eine alternative Art und Weise zu erreichen, Ihr Ziel:

>>>name ="Chris" 
>>>list(name) 
['C', 'h', 'r', 'i', 's'] 

Für Ihr Beispiel: Wenn durch eine Zeichenfolge in python laufen, ist keine Aufzählung erforderlich.

>>>name = "Chris" 
>>>my_list = [] 
>>>for i in name: 
... my_list.append(i) 
>>>my_list 
['C', 'h', 'r', 'i', 's'] 
Verwandte Themen