2012-10-26 5 views
8

Wiederholte SCHNEIDEN auf Tupeln und Listen einfach gut:arbeitet eine Zeichenfolge wiederholt

>>> tuple = ("nav", "yad") 
>>> tuple[0] 
'nav' 
>>> tuple[0][0] 
'n' 

Aber mit Strings:

>>> name="university" 
>>> name[0] 
'u' 

Die seltsame Sache hier ist, wenn ich Slicing über string name Variable wiederholt versuchen , gibt es nichts bei name[0][0] oder name[0][-1], also warum zeigt es "u"?

>>> name[0][0] 
'u' 
>>> name[0][-1] 
'u' 

Und wenn etwas bei name[0][0] ist, warum dann auf andere Indizes nicht?

>>> name[0][1] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: string index out of range 
+0

Wiederholtes Slicing ist kein Merkmal von Listen. Probiere '[1,2,3] [0] [0]'. –

+0

Weil beim Indizieren (nicht schneiden tatsächlich von den Beispielen ich sammle) Strings Sie Strings bekommen - ein Zeichen ist eine Zeichenfolge der Länge eins in Python. Der Typ ändert sich nicht. Nicht der Fall mit Tupeln/Listen. – gorlum0

Antwort

12

Zeichenfolge ist eine Sequenz. String eines Zeichens ist immer noch eine Sequenz mit einem Element. Also mit einer Schnur können Sie name[0][0][0][0]... tun, und es wird gut funktionieren. Gleiche mit dem Index -1, das letzte Element einer Sequenz zurück:

>>> name[0][0] 
'u' 
>>> name[0][0][-1] 
'u' 
>>> name[0][0][-1][-1] 
'u' 

name[0][1] nicht offensichtlich, weil es nur ein Element in der Zeichenfolge name[0] ist.

0

Hinzufügen zu @ Roman's Antwort. Ich glaube, Sie haben den Eindruck, dass name[0] eine Art char zurückgibt. Aber das tut es nicht. Was passiert, ist name[0] gibt eine Zeichenfolge der Länge 1 zurück. Egal, wie oft Sie wiederholt eine nicht leere Zeichenfolge mit 0 indizieren, es gibt immer dasselbe zurück.

Verwandte Themen