2012-10-26 17 views
8

affettare ripetuta funziona su tuple e liste bene:Affettare una stringa più volte

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

Ma con le stringhe:

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

La cosa strana è qui, quando provo ripetuto affettare sopra variabile string name , non c'è niente a name[0][0] o name[0][-1], quindi perché mostra "u"?

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

E se qualcosa è a name[0][0] allora perché non su altri indici?

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

L'affettatura ripetuta non è una funzione delle liste. Prova '[1,2,3] [0] [0]'. –

+0

Perché quando si indicizzano (non si tagliano effettivamente dagli esempi che raccolgo) le stringhe si ottengono stringhe - un carattere è una stringa di lunghezza uno in python. Il tipo non cambia. Non è il caso di tuple/liste. – gorlum0

risposta

12

La sequenza è una sequenza. La stringa di un carattere è ancora una sequenza con un elemento. Quindi con una stringa puoi fare name[0][0][0][0]... e funzionerà bene. Stessa cosa con indice di -1, che restituisce ultimo elemento di una sequenza:

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

name[0][1] fallisce, ovviamente, perché non v'è solo un elemento nella stringa name[0].

0

Per aggiungere alla risposta di @ Roman. Penso che tu abbia l'impressione che name[0] restituirà una sorta di char. Ma non è così. Quello che succede è name[0] restituisce una stringa di lunghezza 1. quindi, indipendentemente dal numero di volte in cui indicizzi ripetutamente una stringa non vuota con 0, restituisce sempre lo stesso valore.