【发布时间】:2015-10-28 14:44:31
【问题描述】:
我需要计算一个范围的长度,但最好不要创建范围,(希望会更快并使用更少的内存。这很重要,因为这个函数会被调用很多次)。长度用于设置扩展切片。
现在我已经试过了:
int_div = lambda n, d: (n + d // 2) // d
def range_len(start, stop, step):
return int_div(stop - start, step)
但在某些情况下,例如 range_len(9, 100, 3) 当正确答案是 31 时它会给出 30。我觉得这应该很简单,我做错了什么?
【问题讨论】:
-
@FirebladeDan 对不起,我不明白你的意思。你是说我应该这样做:range_len(start, stop, step) * step - 1 如果 step 大于 0? (我假设你不是,因为那是错误的,但我就是这么理解的)
-
为什么不用 xrange?它有什么不同?
-
对于它的价值,python3 中的
range实现了一个__len__,它只计算术语的数量(正是你在这里所做的)。所以在 python3 的range上调用len是 O(1)。 -
@NightShadeQueen 我正在使用 Python 2.7,但谢谢。
-
@NightShadeQueen:这很有趣,我认为 python 3 的
range与 Python 2 的xrange完全相同。
标签: python list python-2.7 slice