永恒的蓝色梦想 发表于 2020-4-2 11:50:59

求问 如何计算 range() 的长度

本帖最后由 永恒的蓝色梦想 于 2020-4-8 16:09 编辑

本贴不是代码问题,所以就不贴代码了{:10_327:}

想自己实现一个 range ,想了半天没想出来 range 的长度到底怎么算{:10_262:}

求数学大佬帮忙{:10_266:}给个式子就行

可能是题目表达的不明白,补充说明一下

假设我们有一个 range 对象 range(start,stop,step),那么 range(start,stop,step).__len__() 返回的值应该是?

楼主自己解决了def getRangeLength(start,stop,step):
    if step<0:
      start,stop=stop,start
      step=-step

    if start>=stop:
      return 0

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

永恒的蓝色梦想 发表于 2020-4-2 11:55:22

没人吗{:10_266:}

wuqramy 发表于 2020-4-2 11:55:40

本帖最后由 wuqramy 于 2020-4-2 11:57 编辑

当我什么也没有说

heidern0612 发表于 2020-4-2 11:56:29

字符串?列表?

len一下即可。

陆七曜 发表于 2020-4-2 11:59:13

没太懂这个问题,range(a, b)是指a<=N<b,是这个吗?

永恒的蓝色梦想 发表于 2020-4-2 12:00:47

heidern0612 发表于 2020-4-2 11:56
字符串?列表?

len一下即可。

我说了是range,而且是计算range的长度,

永恒的蓝色梦想 发表于 2020-4-2 12:02:01

陆七曜 发表于 2020-4-2 11:59
没太懂这个问题,range(a, b)是指a

求range(start,stop,step)可以迭代多少个元素

永恒的蓝色梦想 发表于 2020-4-2 12:09:26

好麻烦……https://i0.hdslb.com/bfs/emote/a523f3e4c63e4db1232365765d0ec452f83be97e.png

_2_ 发表于 2020-4-2 12:20:06

本帖最后由 _2_ 于 2020-4-5 11:58 编辑

永恒的蓝色梦想 发表于 2020-4-2 12:02
求range(start,stop,step)可以迭代多少个元素

当我什么也没说

永恒的蓝色梦想 发表于 2020-4-2 12:21:27

_2_ 发表于 2020-4-2 12:20
一个没什么卵用的帖子
https://fishc.com.cn/forum.php?mod=viewthread&tid=150837

……这个早知道了

qiuyouzhi 发表于 2020-4-2 12:25:39

永恒的蓝色梦想 发表于 2020-4-2 12:02
求range(start,stop,step)可以迭代多少个元素

>>> len(list(range(0,10,2)))
5

永恒的蓝色梦想 发表于 2020-4-2 12:29:16

qiuyouzhi 发表于 2020-4-2 12:25


……我需要一个式子{:10_262:}

一个账号 发表于 2020-4-2 12:42:06

本帖最后由 一个账号 于 2020-4-2 12:43 编辑

>>> tuple(range(0, 10, 2)).__len__()
5

这样很浪费资源

zltzlt 发表于 2020-4-2 12:58:17

应该是这样的吧

>>> def len_range(start, stop, step=1):
        return (stop - start) // step

>>> len_range(2, 10)
8
>>> len_range(2, 8, 2)
3

永恒的蓝色梦想 发表于 2020-4-2 13:18:49

zltzlt 发表于 2020-4-2 12:58
应该是这样的吧

我也有想过这个,但是 range(-999, -998, -999) ,range(-99, -98, 2),还有许多,都不符合这个式子……{:10_262:}
还是谢了{:10_248:}

zltzlt 发表于 2020-4-2 13:19:24

永恒的蓝色梦想 发表于 2020-4-2 13:18
我也有想过这个,但是 range(-999, -998, -999) ,range(-99, -98, 2),还有许多,都不符合这个式子……{ ...

没考虑负数的情况……{:10_269:}

永恒的蓝色梦想 发表于 2020-4-2 13:20:26

zltzlt 发表于 2020-4-2 13:19
没考虑负数的情况……

不止是负数,range(1,2,3) 也不符合……

好难啊……

永恒的蓝色梦想 发表于 2020-4-2 13:21:44

一个账号 发表于 2020-4-2 12:42
这样很浪费资源

还不如直接range(0,10,2).__len__(){:10_248:}

zltzlt 发表于 2020-4-2 13:22:18

永恒的蓝色梦想 发表于 2020-4-2 13:20
不止是负数,range(1,2,3) 也不符合……

好难啊……

为什么不直接用 range().__len__() 呢

永恒的蓝色梦想 发表于 2020-4-2 13:30:53

zltzlt 发表于 2020-4-2 13:22
为什么不直接用 range().__len__() 呢

我试图完整的实现range……{:10_262:}
页: [1] 2
查看完整版本: 求问 如何计算 range() 的长度