Quando affettare in pitone, omettendo la porzione end
della sezione (cioè l'estremità in list[:end:]
) Risultati in end
essendo definito come "la dimensione della stringa essere affettato." *Perché lista [:: - 1] non uguale lista [: len (lista): - 1]?
Tuttavia, questo non sembra essere vero quando si utilizza l'argomento step
(la passo in list[::step]
) in una fetta, almeno quando l'argomento è step
-1
. Un semplice esempio:
>>> l = [1, 2, 3]
>>> l[::-1]
[3, 2, 1]
>>> l[:len(l):-1]
[]
Ciò indica che nel caso di un argomento step
essere passato, un valore end
omessa è non equivalente esplicitamente passando la dimensione dell'oggetto essere affettato.
Forse questo è solo un mio fallimento nella lettura della documentazione, ma mi piacerebbe capire perché il mio esempio sopra sembra contraddire la documentazione di Python sull'omissione di valori end
a fette, e idealmente dove questo diverso è documentato.
* Slice indices have useful defaults; an omitted first index defaults to zero, an omitted second index defaults to the size of the string being sliced.
'l [len (l) :: - 1]' è '[3, 2, 1]'. L'inizio è la fine quando vai indietro. –
l'arresto è ora impostato sul terzo indice, quando la stringa viene invertita dal passo -1, l'arresto viene immediatamente raggiunto. Ecco perché restituisce una lista vuota –
L'estratto della documentazione è errato. Si applica solo quando il passo è positivo. Di fatto, non esiste un valore intero corrispondente al valore predefinito per l'indice stop quando il passo è -1, poiché sarebbe logicamente pari a -1, tranne che ha un significato speciale per Python. Devi usare 'Nessuno' per ottenere l'indice desiderato. È un difetto nella notazione della fetta. –