python切片为何左开右闭

Python作为数据科学语言,从一开始的一切的设计就为了更方便的科学计算做着准备,不是标新立异。

Python切片左闭右开的设计有四个原因:

1. Python的索引从0开始,这样使得range(n)和[:n]返回了同样多的n个元素。如果是双闭区间,那么就会返回n+1个元素。

2. 当起止位置信息已知时,可以快速计算切片和区间的长度。只需要end-start即可。如:[7:9]那么长度为2,如果是双闭区间,那么长度就是end-start+1。

3. 可以用一个下标将序列分割成不重合的两部分。[:n],[n:],如果是双闭区间,那么就需要[:n],[n+1:]

4. 语言创立者个人的喜好。就喜欢,你怎么着吧。

此外,Edsger W. Dijkstra对于第2点也给出了很好的解释。我们切割一个序列其实有4种方法:[],(),[),(]。为了保证end-start恰好是区间的长度,那么就只有[),(]两种,在这两种之间,显然,大部分人会喜欢[)这一种,那左闭右开区间不是顺理成章?

Reference:

  1. Luciano Ramalho《Fluent Python》
  2. http://www.cs.utexas.edu/users/EWD

你可能感兴趣的:(python切片为何左开右闭)