Python中向列表追加100整数耗时10秒,为何远慢于追加10万字符串?
为啥列表追加100个整数耗时10秒?原来是测试方式的锅!
嘿,我来帮你把这个困惑捋清楚~你遇到的问题其实是因为你误解了timeit工具的运行逻辑,咱们一步步拆解:
核心原因:timeit默认会重复执行百万次代码
你用的timeit.timeit()函数,默认情况下会把目标代码(也就是这里的test())重复执行1000000次(整整一百万次!)。
你的test()函数每次运行会做100次L.append(i),那算下来总共的append操作次数是:1000000 * 100 = 1亿次
这么多操作耗时10秒,完全是合理的范围。
你之前的字符串测试是单次运行,根本不是一个维度
你提到的追加100000个字符串耗时0.06秒,是因为你手动执行了一次wordlist1()函数,只跑了一轮10万次append。这和timeit百万次重复运行的测试结果,根本没有可比性。
验证一下?试试修改timeit的执行次数
你可以调整timeit的number参数,指定只运行1次:
print(timeit.timeit("test()", setup="from __main__ import test", number=1))
这时候你会看到test()的耗时非常短,和你预期的一样。
反过来,如果你用timeit测试wordlist1(),比如让它跑10次:
print(timeit.timeit("wordlist1()", setup="from __main__ import wordlist1", number=10))
你会得到大约0.6秒的结果,刚好是单次0.06秒的10倍,这也能验证咱们的结论。
最后补一句:timeit的设计初衷
timeit本来就是用来测试小段代码的平均执行耗时,通过多次重复运行来抵消单次运行的波动,所以默认次数设置得很高。下次用的时候记得留意这个默认行为哦~
内容的提问来源于stack exchange,提问作者Michael Chen
相关产品推荐
相关产品推荐

