为什么将float转换为String并使用额外的拆分比转换为int更快?

时间:2014-03-25 01:32:13

标签: python benchmarking

回答有关如何删除数字的浮动部分(从100.25移除.25)的问题,一位用户回答说int(float_num)是删除它的浮动部分的好方法。我遇到过使用字符串的方式,我认为这显然比这更糟糕,但我认为考虑它很有意思。这是我的答案:str(float_num).split('.')[0]。更长和更丑,这种方法似乎比转换为int更糟糕。

然后,任何人都可以解释为什么我尝试的基准测试,给更长的方法提供更好的结果而不是更简单的方法?也许拥有核心i7计算机会影响结果?我做错了吗?

编辑:最终答案的类型不需要是一个int。关键是要分析为什么使用str方法(在我的情况下)删除浮动部分更快

benchmarks

2 个答案:

答案 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,你仍然将它作为新类型转换。

然而,字符串操作只是削减了它已有的部分内容,没有涉及复杂性或数学。