如何在Python中确定范围函数的正确结束?

时间:2017-11-16 13:26:53

标签: python

我注意到,当我尝试这样做时,我得到完全相同的结果,例如:

   range(1,13,2)
=> [1, 3, 5, 7, 9, 11]

   range(1,12,2)
=> [1, 3, 5, 7, 9, 11]

结果完全相同,但在这种情况下哪一个是正确的?为什么?

范围的结束是否必须对您采取的步骤采取措施?

  

就像,列表应该给我11作为最后一个数字的想法,所以我   应该拿13,因为我们有2步,或者这是一个糟糕的想法?

3 个答案:

答案 0 :(得分:1)

两者都是正确的。范围是从开始间隔开始的数字序列,并且严格地小于停止。由于该定义,您将始终找到步骤可能的值,以便停止给出完全相同的序列(特殊情况:当步骤具有默认值1时,仅存在一个停止的值)

答案 1 :(得分:0)

range(start,end,step)

范围功能将为您提供从"开始"开始的数字。直到它到达" end-1",但是每个号码与下一个号码的距离为#34;步骤"。

对于你的第一个案例你的结局是13-1 = 12,所以你可以得到的最终值是12.但是因为你的步数是2,所以得到11(1,3,5,7,9),加2并得到13,它无法进入。

对于你的第二种情况,你的结局是12-1 = 11。它增加2直到达到11(1,3,5,7,9)并停在那里。

对于你应该使用哪一个,你真的没有正确的答案,因为它取决于你使用的范围。我猜你的案例2的计算量会略微减少,因为它不需要添加最后一步,但这很小。

答案 2 :(得分:0)

根据documentation,如果step严格为正,则范围中的最大元素将是start + i * step小于stop的最大元素。

这意味着最大的元素是:

start + ((stop - start - 1)//step) * step

由于整数除法,range(1,13,2)range(1,12,2)(11)的结果相同:

>>> 11 // 2
5
>>> 10 // 2
5

为避免任何意外,您可以始终将max + 1用作stop。就你的例子而言,那就是range(1,12,2)