Python中的Range函数为什么要设计成左闭右开区间?
2018-11-29 22:40
411 查看
Python中的Range函数为什么要设计成左闭右开区间?
Dijkstra的观点
没错就是搞出最短路径的高效算法的那位Dijkstra.
链接: Dijkstra的解释.
基于Dijkstra观点的解释
为了表示 1,2,3,…,9 这样一个序列,有四种方法
- 1 ≤ i < 10(左闭右开区间)
- 0 < i ≤ 9(左开右闭区间)
- 1 ≤ i ≤ 9(闭区间)
- 0 < i < 10(开区间)
那么我们是否有理由更喜欢其中一种方法呢?答案是肯定的。
方法一和方法二具有以下优点:他们边界之间的差正好等于序列的长度。并且,在这两种表示方法中,如果我们观察两个相邻的序列,那么其中一个序列的上限正好等于另一个的下限。
让我们继续分析:自然数是有最小值的(0)。如果像二种和第四种那样,在下界采用 < ,那么当我们想表示一个从0开始的序列,那么下界会出现非自然数-1(比如 0,1,…,5 会被表示成 -1 < i ≤ 5),这种表示法显然不够优雅,所以对下界而言,我们最好选择 ≤。
再看上界,在下界使用 ≤ 时,序列便可以从最小的自然数0开始,此时,如果我们想要表示空集的话,当上届同样采用 ≤ 时会导致上界小于下届并出现非自然数,如:0 ≤ i ≤ -1 。显然,这也是不够优雅的,也不符合我们的习惯。而如果上界使用 <,就会方便很多,同样,表示空集:0 ≤ i < 0。因此对于上界,我们采用 < 。
综上所述,Python中的Range函数设计成左闭右开区间是比较优雅的。
[备注]:在许多编程语言中,这个细节都没有给予足够的重视。FORTRAN中下标总是从1开始; 在ALGOL 60和PASCAL中,采用的是上述第三种方法; 最近的SASL已经倒退到FORTRAN惯例:SASL中的序列同时也是正整数的函数。噫吁唏!(备注结束。)
相关文章推荐
- 为什么python设计时要有__init__.py才视为包
- python设计模式之单例设计模式
- Python OOP容器设计时合理引入列表方法
- python_设计模式——责任链模式
- 为什么有这么多 Python?
- Python系列干货之Python与设计模式!
- Python设计模式
- python构架的科学计算程序设计(转载)
- 为什么String要设计成不可变的?
- 为什么Python Web流行度不如PHP?
- Python如何获得相同步长的小数数列 附range与numpy包中arange函数的用法与区别
- python单列设计模式总结
- 为什么款式设计好看的胸罩一般都不提供大码?
- 零基础学python-19.4 为什么要在意列表解析与序列映射函数map
- 设计模式-解释器模式-interpreter-python
- 举例讲解Python设计模式编程中对抽象工厂模式的运用
- Python设计模式
- 为什么苹果官网设计如此吸引人?
- python新手求解答,为什么运行不下去了
- 为什么越来越多的企业选择使用Python开发?