Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does slice [:-0] return empty list in Python

Stumbled upon something slightly perplexing today while writing some unittests:

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

Can't for the life of me figure out why blah[:-0] # [] should be the case, the pattern definitely seems to suggest that it should be ['a', 'b', 'c']. Can anybody help to shed some light on why that is the case? Haven't been able to find mention in the docs as to why that is the case.

like image 663
Brent Hronik Avatar asked Jun 16 '15 22:06

Brent Hronik


2 Answers

-0 is 0, and a slice that goes from the beginning of a list inclusive to index 0 non-inclusive is an empty list.

like image 119
TigerhawkT3 Avatar answered Oct 11 '22 07:10

TigerhawkT3


Python doesn't treat -0 any different from 0.

blah[:0]

means all elements up to but not including the first one. This is an empty list, and blah[:-0] is exactly the same thing.

You can test this by checking that

blah[0:]

is the whole list, starting from the first element.

like image 30
jwg Avatar answered Oct 11 '22 07:10

jwg