Python作為數(shù)據(jù)科學(xué)語言赊堪,從一開始的一切的設(shè)計(jì)就為了更方便的科學(xué)計(jì)算做著準(zhǔn)備吼虎,不是標(biāo)新立異今魔。
Python切片左閉右開的設(shè)計(jì)有四個(gè)原因:
1. Python的索引從0開始锭弊,這樣使得range(n)和[:n]返回了同樣多的n個(gè)元素债沮。如果是雙閉區(qū)間,那么就會(huì)返回n+1個(gè)元素鹿鳖。
2. 當(dāng)起止位置信息已知時(shí)扁眯,可以快速計(jì)算切片和區(qū)間的長度。只需要end-start即可翅帜。如:[7:9]那么長度為2姻檀,如果是雙閉區(qū)間,那么長度就是end-start+1涝滴。
3. 可以用一個(gè)下標(biāo)將序列分割成不重合的兩部分绣版。[:n],[n:],如果是雙閉區(qū)間歼疮,那么就需要[:n],[n+1:]
4. 語言創(chuàng)立者個(gè)人的喜好杂抽。就喜歡,你怎么著吧腋妙。
此外默怨,Edsger W. Dijkstra對于第2點(diǎn)也給出了很好的解釋。我們切割一個(gè)序列其實(shí)有4種方法:[],(),[),(]骤素。為了保證end-start恰好是區(qū)間的長度匙睹,那么就只有[),(]兩種愚屁,在這兩種之間,顯然痕檬,大部分人會(huì)喜歡[)這一種霎槐,那左閉右開區(qū)間不是順理成章?
Reference:
- Luciano Ramalho《Fluent Python》
- http://www.cs.utexas.edu/users/EWD