【发布时间】:2014-02-01 17:26:34
【问题描述】:
我正在尝试:
python3 -m timeit -c 'len("".join([str(x) for x in range(0, 999999)]))'
10 loops, best of 3: 330 msec per loop
python3 -m timeit -c 'sum((len(y) for y in [str(x) for x in range(0, 999999)]))
10 loops, best of 3: 439 msec per loop
为什么会这样?有更快的方法吗?
附:假设会提前一个字符串列表。
【问题讨论】:
-
试试
sum(map(len, map(str, range(999999)))),它可能会更快。但谁在乎,真的.. -
@wim 我刚刚用预先构建的列表进行了基准测试,您的建议仍然比
join+len慢三倍。 -
您将许多小字符串连接成一个大字符串,您应该计算每个小字符串的长度,这样会更快。另外,如果你想知道一个数字有多少位,还有更好的方法。
-
哦,我在 python 2 而不是 python 3 上计时 - 它比两者都快。 编辑: 对我来说,它似乎仍然比 python 3 上的速度更快。奇数
-
sum([len(str(x)) for x in range(999999)])怎么样?我猜它会比你的第二个选项快一点。
标签: python performance