例如 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 这朵奇葩不放谢谢。那个数学家定义的区间是不含右界的请告诉我。我必定谦恭学习回复内容:
why are standard iterator ranges [begin, end) instead of [begin, end]?
比较一下下面三种划分实数的方案 [0, 1] (1, 2) [2, 3]… (0, 1) [1, 2] (2, 3)… [0, 1) [1, 2) [2, 3)…显然最后一种方案最美,所有区间包含的元素“一样多”。当然,这里只是说明半开半闭/半闭半开作划分是最合适的,两者相比之下半闭半开更自然。
天天说什么数学家数学家,题主你个学物理的就不要来指导江山教我们应该怎么设计语言啊。尽管你很固执,我还是想开化开化你。
为什么左闭右开,为什么数组从0开始,这是因为c语言获得一个数组a的元素地址&a[b]就可以直接翻译成&a+b*sizeof(*a),免去了一次减法。这次减法在c语言刚发明的时候可是很重要的哦!然后你有一个长度s,那你遍历数组用的for循环就是for(i=0;i> s=[1,2,3,4,5,6]
>>> s
[1, 2, 3, 4, 5, 6]
>>> for i in range(0,6):
… print s[i]
其实来源于c语言的数组int arr[6]={0,1,2,3,4,5};//0 to 5…数组遍历for(int i=0;i