我不知道为什么会这样。我弄乱了一些列表,我需要一个for
从 0 到log(n, 2)
n 是列表长度的循环。但是代码非常慢,所以经过一番研究,我发现问题出在范围生成上。演示示例代码:
n = len([1,2,3,4,5,6,7,8])
k = 8
timeit('range(log(n, 2))', number=2, repeat=3) # Test 1
timeit('range(log(k, 2))', number=2, repeat=3) # Test 2
输出
2 loops, best of 3: 2.2 s per loop
2 loops, best of 3: 3.46 µs per loop
测试的数量很少(我不希望它运行超过 10 分钟),但它已经表明它range(log(n, 2))
比仅使用整数的对数的对应物慢几个数量级。这真的很令人惊讶,我不知道为什么会发生这种情况。可能是我的 PC 上的问题,可能是 Sage 问题或 Python 错误(我在 Python 上没有尝试相同的方法)。
使用xrange
而不是range
也无济于事。此外,如果您获得带有 的数字.n()
,则测试 1 以与 2 相同的速度运行。
有人知道会发生什么吗?谢谢!