about me


my software


Yucatán Photos

St Lucia Photos

Photo Album



< June 2005 >
    1 2 3 4
5 6 7 8 91011

past articles »

Click for San Francisco, California Forecast

San Francisco, USA


Python's half open index notation

Beginner programmers often wonder about Python's sequence indexing and slicing notation. Array index starts from 0. Slicing uses half open notations, where L[a:b] is a subsequence with index x where a <= x < b.

Why is the endpoint excluded? Isn't it more intuitive if array index starts from 1 and the endpoint is included, so that a 3 elements array is referenced as L[1:3] with items L[1], L[2], L[3]?

It turns out this notation is an elegant and deliberate design and it has some excellent properties.

We write programs to operate on arrays, to find their length, traverse the subsequences, split them or join them. The half open notation always show a simple pattern. But the inclusive notation often requires adding 1 or substracting 1 to the indexes in many operations. Thus it is more vulnerable to off-by-one-error. This article One True Way of array indexing discuss this at length. I have reproduce its example (with corrections) below:

Operation Half open Inclusive
length of a slice L[a:b] b-a (b-a+1)
first n characters of L L[:n] L[1:n]
last n characters of L L[-n:] L[len(L)-n+1:]
The identity slice L == L[0:len(L)] == L[:] L[1:len(L)]
The empty slice L[a:a] is empty for any a. perhaps L[a:a-1]?
A slice of length n, from point a L[a:a+n] L[a:a+n-1]
Split L[a:b] at index c L[a:b] == L[a:c]+L[c:b] L[a:c-1]+L[c:b]

Another important property is an empty sequence can be expressed by L[a:a], while there is no natural way to express an empty sequence with the inclusive notation. But do we really need to care about a special case? Absolutely! In fact failure to account for empty input is one of the most common error. Just like zero is a fundamental concept in mathematics, always think how you program can handle null input. An inferior approach is to represent empty sequence by None or null pointer. This creates a special case so that a variable need to be tested before dereferencing. Failure to do so contributes to unexpected exceptions. It is an elegant design that L[a:b] can also represent sequences with 0 length.

C++'s STL also choose this notation to represent a range. According to the literature this is crucial because "algorithms that operate on n things frequently require n+1 positions. Linear search, for example (find) must be able to return some value to indicate that the search was unsuccessful." I have seen so many people flunked link list or data structure exercises because they have trouble dealing with the end of a list. Often a good solution is shift the focus beyond the n concrete objects to the n+1 positions around them. I hope this help to make sense of the half open notation.

2005.06.16 [, ] - comments



blog comments powered by Disqus

past articles »


BBC News


Turkish jets 'intercept Russian plane' (05 Oct 2015)


Islamic State 'blows up Palmyra arch' (05 Oct 2015)


Doll captivates Australian rugby fans (05 Oct 2015)


American Apparel files for bankruptcy (05 Oct 2015)


MSF 'disgust' at Afghan hospital claims (05 Oct 2015)


Ai Weiwei 'finds bugging devices' (05 Oct 2015)


Extreme poverty falls to record low (05 Oct 2015)


Nobel Prize for parasitic diseases (05 Oct 2015)


S Carolina rains 'once in 1,000 years' (05 Oct 2015)


Nauru to end asylum seekers' detention (05 Oct 2015)

more »


Slashdot News for nerds, stuff that matters


Daimler Tests a Self-Driving Truck On the Autobahn (2015-10-05T00:48:00+00:00)


Japan Display Squeezes 8K Resolution Into 17-inch LCD, Cracks 510 PPI At 120Hz (2015-10-04T23:27:00+00:00)


Desktop Turing-Welchman Bombe Build (2015-10-04T22:22:00+00:00)


OpenIndiana Hipster 2015.10: Keeping an Open-Source Solaris Going (2015-10-04T21:16:00+00:00)


This is not F1 (or NASCAR): High-End Hybrids Race In Texas (2015-10-04T20:17:00+00:00)


Chrome AdBlock Joining Acceptable Ads Program (And Sold To Anonymous Company) (2015-10-04T19:09:00+00:00)


Ask Slashdot: Best Country For Secure Online Hosting? (2015-10-04T17:41:00+00:00)


When Fraud Detection Shuts Down Credit Cards Inappropriately (2015-10-04T16:35:00+00:00)

more »


TechPsychic Tech Rumors and Invented News

more »


SF Gate


Bay Area News (7 Jan 2012)


City Insider (11 Feb 2012)


Crime Scene (13 Feb 2012)


C.W Newius Column (10 Jan 2012)


C.W. Nevius Blog (11 Feb 2012)


Education News (10 Jan 2012)


KALW (11 Feb 2012)


Matier and Ross Blog (11 Feb 2012)


Google chases streaming crowd with sprightlier Chromecast (4 Oct 2015)


Best smartphones for selfies (4 Oct 2015)


Paycheck mystery: More jobs and fewer people but low raises (4 Oct 2015)


Strike, protests could happen for tech bus drivers, union warns (4 Oct 2015)


40% of Millennials pay for print, online news (3 Oct 2015)


App of the Week: Lark (3 Oct 2015)

more »


Asia Times Online


China ramps up charges against Zhou (Fri 20 Mar 2015 11:00:00 GMT)


'100 dead' in Myanmar fighting (Fri 20 Mar 2015 11:00:00 GMT)


Tunisian president vows no mercy (Fri 20 Mar 2015 11:00:00 GMT)


SPENGLER Israel's 'referendum' on 'two-state solution' (Fri 20 Mar 2015 11:00:00 GMT)


Russia, S Ossetia sign 'integration' pact (Fri 20 Mar 2015 11:00:00 GMT)


US military plunges Aquino into crisis (Fri 20 Mar 2015 11:00:00 GMT)


Rahmon celebrates Tajik democracy (Fri 20 Mar 2015 11:00:00 GMT)


THE BEAR'S LAIR Being old in 2040 no fun (Fri 20 Mar 2015 11:00:00 GMT)


China grant boosts Nepal ties (Fri 20 Mar 2015 11:00:00 GMT)

more »


Site feed Updated: 2015-Oct-05 03:00