2015-06-16 20 views
5

imbatterci in qualcosa di leggermente perplessi oggi durante la scrittura di alcuni Unittests:Perché fetta [: -0] tornare lista vuota in Python

blah = ['a', 'b', 'c'] 
blah[:-3] # [] 
blah[:-2] # ['a'] 
blah[:-1] # ['a', 'b'] 
blah[:-0] # [] 

non posso per la vita di me capire perché blah[:-0] # [] dovrebbe essere il caso , il modello sembra suggerire che dovrebbe essere ['a', 'b', 'c']. Qualcuno può aiutare a far luce sul perché questo è il caso? Non sono stato in grado di trovare menzione nei documenti sul perché questo è il caso.

+0

Il - significa semplicemente contare all'indietro per trovare il punto di partenza. Proprio come '[: -2]' fornisce una lista contenente gli ultimi 2 elementi, '[: -0]' fornisce una lista contenente gli ultimi 0 elementi. – mehtunguh

+2

'[: -2]' fornisce una 'lista' contenente tutti gli elementi _except_ gli ultimi due. – TigerhawkT3

risposta

11

-0 è 0, e una fetta che va dall'inizio di un list inclusiva all'indice 0 non inclusivo è un vuoto list.

+0

Parlando brevemente di "-0" è "0", devi ricordare che il compilatore sta valutando i termini mentre analizza, e così quando vede '-0', finisce per mantenere '0'. – bmhkim

+0

Questa è l'intera spinta di "' -0' è '0'". Non c'è bisogno di ricordare la stessa cosa due volte. – TigerhawkT3

5

Python non tratta -0 diverso da 0.

blah[:0] 

significa tutti gli elementi fino a ma non incluso il primo. Questa è una lista vuota e blah[:-0] è esattamente la stessa cosa.

È possibile verificare questo controllando che

blah[0:] 

è l'intero elenco, a partire dal primo elemento.