回答有关如何删除数字的浮动部分(从100.25移除.25)的问题,一位用户回答说int(float_num)
是删除它的浮动部分的好方法。我遇到过使用字符串的方式,我认为这显然比这更糟糕,但我认为考虑它很有意思。这是我的答案:str(float_num).split('.')[0]
。更长和更丑,这种方法似乎比转换为int更糟糕。
然后,任何人都可以解释为什么我尝试的基准测试,给更长的方法提供更好的结果而不是更简单的方法?也许拥有核心i7计算机会影响结果?我做错了吗?
编辑:最终答案的类型不需要是一个int。关键是要分析为什么使用str方法(在我的情况下)删除浮动部分更快
答案 0 :(得分:3)
这是因为在str
情况下,您没有对转化进行基准测试,因为您没有将它们作为要执行的字符串。相反,Python解释器将执行"转换"在将结果(" 100")提供给timeit
之前,这将很乐意"执行"声明(基本上什么都不做)。
将语句放在引号中,将时间增加数量级,显示实际运行时间:
>>>timeit.timeit('str(100.25).split(".")[0]', number = 100000)
0.0971575294301
>>>timeit.timeit(str(100.25).split(".")[0], number = 100000)
0.00131594451899
参考我的评论 - 类型转换为int是时间的地方:
>>>timeit.timeit('int(str(100.25).split(".")[0])', number = 100000)
0.14871997597698083
>>> timeit.timeit(str(100.25).split(".")[0], number = 100000)
0.0013893059552003706
>>> timeit.timeit('int(100.25)', number = 100000)
0.019588643801725425
随着您的数字越来越长,字符串方法将比整数方法更慢。他们以不同的速度增长。
答案 1 :(得分:0)
我认为简单的字符串操作比类型转换更快,即使它只是浮动到int,你仍然将它作为新类型转换。
然而,字符串操作只是削减了它已有的部分内容,没有涉及复杂性或数学。