2015-06-16 10 views
5

natknęli się czegoś nieco kłopotliwy dzisiaj pisząc kilka unittests:Dlaczego plasterek [: -0] zwraca pustą listę w Pythonie

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

nie może dla życia mnie rysunek się, dlaczego blah[:-0] # [] powinno być w przypadku wzór zdecydowanie sugeruje, że powinien on być ['a', 'b', 'c']. Czy ktokolwiek może pomóc rzucić trochę światła na to, dlaczego tak się dzieje? Nie udało się znaleźć w dokumentach wzmianki o tym, dlaczego tak się dzieje.

+0

Po prostu oznacza odliczanie wstecz, aby znaleźć punkt początkowy. Tak jak '[: -2]' daje listę zawierającą ostatnie 2 elementy, '[: -0]' daje listę zawierającą ostatnie 0 elementów. – mehtunguh

+2

'[: -2]' daje 'list' zawierającą wszystkie elementy _except_ ostatnie dwa. – TigerhawkT3

Odpowiedz

11

-0 jest 0 i plaster, który idzie od początku list włącznie do indeksu 0 niewłącznie jest pusty list.

+0

Krótko mówiąc, "-0" to "0", musisz pamiętać, że kompilator analizuje terminy podczas ich interpretacji, a więc gdy widzi "-0", to kończy się na utrzymywaniu "0". – bmhkim

+0

To cały ciąg "-0" to "0". Nie trzeba pamiętać o tym samym dwa razy. – TigerhawkT3

5

Python nie traktuje -0 inaczej niż z 0.

blah[:0] 

oznacza wszystkie elementy, które nie zawierają pierwszej. To jest pusta lista, a blah[:-0] to dokładnie to samo.

Można to sprawdzić poprzez sprawdzanie, czy

blah[0:] 

jest cała lista, począwszy od pierwszego elementu.

Powiązane problemy