为什么python中的范围“停止”?

时间:2013-06-22 18:19:26

标签: python range

好的,给孩子们教python。我们刚刚写了第一个小程序:

b = 0
for a in range (1, 10)
    b = b + 1
    print a, b

停止在9,9。他们问“为什么会这样”,我不能说我知道答案。

我的代码总是涉及文件,而我的“for read in reader”并没有阻止一行短路,所以我实际上并不知道。在数学符号中,此行为将为[1,10)。技术上(1,10)2,3,4,5,6,7,8,9,我确实需要[1,10]

3 个答案:

答案 0 :(得分:8)

它通常比替代品更有用。

  • range(10)只返回10个项目(如果你想重复10次)
  • range(10)完全返回10个项目列表中的索引
  • range(0, 5) + range(5, 10) == range(0, 10),可以更轻松地推理范围

答案 1 :(得分:4)

关键是range被定义为range(start,stop,step=1) http://docs.python.org/2/library/functions.html#range。最后一个元素总是小于stop

实际上,它是这样定义的,因为len n列表的索引编号为0n-1

理论上更令人满意的答案是它避免了替代方案,即序列中的最后一个元素将是大于或等于stop的第一个整数,这通常是意外的。它还会导致Pavel Anossov列出的不错的属性,所有这些属性都会受到大于或等于规则的影响。

样式上的一点:在没有空格的情况下编写range (1, 10)更为常见,因为range是一个返回项目列表(或3.x,生成器)的函数要求的范围。 python中的for循环总是按顺序遍历数据结构或生成器的元素(通常是iterable对象)。

答案 2 :(得分:3)

这就是python range的工作原理。引自docs

  

这是一个用于创建包含算术的列表的通用函数   级数。它最常用于for循环。争论必须   是简单的整数。如果省略step参数,则默认为1。   如果省略start参数,则默认为0.完整表单   返回普通整数列表[start,start + step,start + 2 *   步, ...]。如果step为正,则最后一个元素是最大的开始   + i *步骤少于停止;如果step为负数,则最后一个元素是最小的start + i * step大于stop。步骤不能为零   (或者引发ValueError)。