>>> 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(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()
其他回答
它对于分割范围也很有用;Range (a,b)可以分为Range (a, x)和Range (x, b),而包含Range则可以写成x-1或x+1。虽然您很少需要分割范围,但您确实倾向于经常分割列表,这是切片列表l[a:b]包括第a个元素而不包括第b个元素的原因之一。那么range具有相同的属性会使它很好地一致。
基本上在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()
专属范围确实有一些好处:
首先,对于长度为n的列表,范围(0,n)中的每个项都是有效的索引。
同样,range(0,n)的长度为n,而不是包含range的长度为n+1。
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迭代是主要的用例。