>>> 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()

其他回答

考虑代码

for i in range(10):
    print "You'll see this 10 times", i

这个想法是,你得到一个长度为y-x的列表,你可以(如上所述)迭代。

仔细阅读python文档的范围——他们认为for-loop迭代是主要的用例。

python中范围的两个主要用途。所有事物都倾向于落入其中一种

整数。使用内置:range(start, stop, step)。在一般情况下,包含stop意味着结束步骤是不对称的。考虑范围(0、5、3)。如果默认行为在结束时输出5,它将被破坏。 浮动桥。这是为数值用途(有时它碰巧也是整数)。然后使用numpy.linspace。

因为调用range(0,10)更常见,它返回[0,1,2,3,4,5,6,7,8,9],其中包含10个元素,等于len(range(0,10))。记住,程序员更喜欢基于0的索引。

另外,考虑下面的公共代码片段:

for i in range(len(li)):
    pass

你能看出如果range()恰好上升到len(li),这将是有问题的吗?程序员需要显式地减去1。这也符合程序员喜欢for(int i = 0;I < 10;i++) over for(int I = 0;I <= 9;我+ +)。

如果你频繁调用起始值为1的range,你可能需要定义自己的函数:

>>> def range1(start, end):
...     return range(start, end+1)
...
>>> range1(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

它对于分割范围也很有用;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