>>> 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中的范围(n)返回从0到n-1。分别为(1,n)从1到n-1。 所以,如果你想省略第一个值,同时得到最后一个值(n),你可以使用下面的代码简单地做到这一点。
for i in range(1, n + 1):
print(i) #prints from 1 to n
其他回答
范围的长度是上值减去下值。
它非常类似于:
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()。
考虑代码
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
的长度。要得到计数,只需使用整数除法。
基本上在python range(n)中迭代n次,这是排他的性质,这就是为什么它在打印时不给出最后一个值,我们可以创建一个函数,给出 包含值,这意味着它还将打印范围中最后提到的值。
def main():
for i in inclusive_range(25):
print(i, sep=" ")
def inclusive_range(*args):
numargs = len(args)
if numargs == 0:
raise TypeError("you need to write at least a value")
elif numargs == 1:
stop = args[0]
start = 0
step = 1
elif numargs == 2:
(start, stop) = args
step = 1
elif numargs == 3:
(start, stop, step) = args
else:
raise TypeError("Inclusive range was expected at most 3 arguments,got {}".format(numargs))
i = start
while i <= stop:
yield i
i += step
if __name__ == "__main__":
main()