Rumah >pembangunan bahagian belakang >Tutorial Python >为什么 Python 里面的 range 不包含上界?
例如 range(1,5),其实只包含1,2,3,4 即便是range(0,6,2),也不包含6。如果数不在range里那在range里出现这个数字的含义何在? 数组从0开始记数我已经忍了,range不含上界这是一个什么意思?这还让slice等等操作如何被人类理解啊? 另外,左闭右开是哪里来的习惯?有什么渊源? 题主赞同下列答案: “range 的上界参数并非数学意义上的上界,而是计算意义上的跳出循环的条件(当把循环结构作用于这个 range 时,遇到“上界”,就意味着跳出);与 C / C++ 中数组指针为什么被允许指向数组后面的一个元素的原因类似。题主可以查查 Andrew Koenig 在这方面非常细致深入的讨论。” 看见轮子老师的答案我不禁了解了一件事:程序员果然固执。。range 接受的第二个参数又不是数组长度,而是数组的上界。难道你要让我们都认为range(1,6) 中的6是这个数组的长度?1,2,3,4,5 的长度是6?range(5,6) 6 是数组长度? 实际上我赞同range(start,end) 是对应于for(int i=start, i。。不要用C语言来辩解了。我学过C,我知道数组从0开始,但我无法理解range 不含上界。学习下matlab 和Mathematica 以及其他工程软件中看看工程师和科学家怎么想的吧,轮子哥。 另外本题的重点不是数组从0,而是range 的上界。不要抓住dijkstra 这朵奇葩不放谢谢。那个数学家定义的区间是不含右界的请告诉我。我必定谦恭学习
天天说什么数学家数学家,题主你个学物理的就不要来指导江山教我们应该怎么设计语言啊。尽管你很固执,我还是想开化开化你。
为什么左闭右开,为什么数组从0开始,这是因为C语言获得一个数组a的元素地址&a[b]就可以直接翻译成&a+b*sizeof(*a),免去了一次减法。这次减法在C语言刚发明的时候可是很重要的哦!然后你有一个长度s,那你遍历数组用的for循环就是for(i=0;i
好了,python又不是C语言,但是(据说)python的第一个实现是C写的哦!几乎所有语言受到C的影响全部都做成这样了。当然有少部分的语言不是,譬如说Visual http://Basic.NET,譬如说我为我自己的www.gaclib.net 内置脚本引擎做的傻逼小脚本(最后发现swift的关键设计跟我的完全一致,太丢脸了)。这纯粹看语言他爹的喜好。python他爹就不是什么数学家,哈哈哈哈。
不过我们已经互相拉黑了,我也不用看到题主你的评论了,好开心。
Why are standard iterator ranges [begin, end) instead of [begin, end]?
楼下 @shell von 的一个链接,我发现数学家Dijkstra也是这么想的。
关于这个问题,我想应该是这样:<code class="language-text">i = l;
while (i </code>
大家都喜欢左闭右开区间。
设计者:“爷乐意”
建议你还是用Basic语言好了,数组可以从1开始,for 可以 1 to 2这样写,不过题主好像是个软黑。>>> s=[1,2,3,4,5,6]
>>> s
[1, 2, 3, 4, 5, 6]
>>> for i in range(0,6):
... print s[i]