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]
。
答案 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
列表的索引编号为0
到n-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)。