>>> range(1,11)
给你
[1,2,3,4,5,6,7,8,9,10]
为什么不是1-11?
他们是随机决定这样做的,还是有一些我没有看到的价值?
>>> range(1,11)
给你
[1,2,3,4,5,6,7,8,9,10]
为什么不是1-11?
他们是随机决定这样做的,还是有一些我没有看到的价值?
当前回答
python中范围的两个主要用途。所有事物都倾向于落入其中一种
整数。使用内置:range(start, stop, step)。在一般情况下,包含stop意味着结束步骤是不对称的。考虑范围(0、5、3)。如果默认行为在结束时输出5,它将被破坏。 浮动桥。这是为数值用途(有时它碰巧也是整数)。然后使用numpy.linspace。
其他回答
考虑代码
for i in range(10):
print "You'll see this 10 times", i
这个想法是,你得到一个长度为y-x的列表,你可以(如上所述)迭代。
仔细阅读python文档的范围——他们认为for-loop迭代是主要的用例。
只是在很多情况下更方便推理。
基本上,我们可以把范围看作起点和终点之间的间隔。如果start <= end,则它们之间的间隔长度为end - start。如果len实际上被定义为长度,你会得到:
len(range(start, end)) == start - end
但是,我们计算范围中包含的整数,而不是测量间隔的长度。为了保持上述性质为真,我们应该包括其中一个端点并排除另一个端点。
添加step参数就像引入一个长度单位。在这种情况下,你会期望
len(range(start, end, step)) == (start - end) / step
的长度。要得到计数,只需使用整数除法。
它对于分割范围也很有用;Range (a,b)可以分为Range (a, x)和Range (x, b),而包含Range则可以写成x-1或x+1。虽然您很少需要分割范围,但您确实倾向于经常分割列表,这是切片列表l[a:b]包括第a个元素而不包括第b个元素的原因之一。那么range具有相同的属性会使它很好地一致。
范围的长度是上值减去下值。
它非常类似于:
for (var i = 1; i < 11; i++) {
//i goes from 1 to 10 in here
}
c风格的语言。
也像Ruby的范围:
1...11 #this is a range from 1 to 10
然而,Ruby意识到很多时候你想要包含终端值,并提供了另一种语法:
1..10 #this is also a range from 1 to 10
它与基于零的索引和len()结合使用效果很好。例如,如果列表x中有10个项目,它们的编号为0-9。Range (len(x))给出0-9。
当然,人们会告诉你,对于item in x或者index, item in enumerate(x)而不是i in range(len(x))更符合python规则。
切片也是这样工作的:foo[1:4]是foo的第1-3项(请记住,由于从零开始的索引,第1项实际上是第二项)。为了保持一致性,它们应该以相同的方式工作。
我认为它是:“你想要的第一个数字,后面跟着你不想要的第一个数字。”如果你想要1-10,你不想要的第一个数字是11,所以它的范围是(1,11)。
如果在特定的应用程序中它变得很麻烦,那么很容易编写一个小的帮助函数,向结束索引添加1并调用range()。