2012-10-26 15 views
8

Powtarzające krojenie działa na krotki i listy dobrze:Krojenie ciąg wielokrotnie

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

Ale z ciągów:

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

Dziwne rzeczą jest, gdy próbuję powtarzane krojenia nad String nazwa zmiennej , nic nie ma na name[0][0] lub name[0][-1], więc dlaczego pokazuje "u"?

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

A jeśli coś jest w name[0][0] to dlaczego nie na innych indeksów?

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

Powtarzające krojenie nie jest cechą list. Spróbuj '[1,2,3] [0] [0]'. –

+0

Ponieważ podczas indeksowania (nie krojenie faktycznie z przykładów, które zbieram) ciągi otrzymują ciągi znaków - znak jest ciągiem długości jeden w python. Typ nie zmienia się. Nie w przypadku krotek/list. – gorlum0

Odpowiedz

12

Łańcuch jest sekwencją. Ciąg jednego znaku jest nadal sekwencją z jednym elementem. Tak więc z ciągiem można wykonać name[0][0][0][0]... i będzie działać poprawnie. Podobnie jest z indeksem -1, która zwraca ostatni element sekwencji:

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

name[0][1] oczywiście nie dlatego, że jest tylko jeden element w łańcuchu name[0].

0

Aby dodać do odpowiedzi @ Romana. Myślę, że masz wrażenie, że name[0] wróci pewnego rodzaju char. Ale tak nie jest. Co się stanie, to name[0] zwraca ciąg o długości 1. więc bez względu na to, ile razy wielokrotnie indeksujesz niepustny ciąg z 0, zawsze zwraca to samo.

Powiązane problemy