2012-07-27 61 views
3

我目前正在编写一个脚本,它在某些时候需要比较两个不同的源/输入提供给脚本的数字。一个源提供数字作为整数,一个源提供它们作为字符串。我需要比较它们,所以我需要在整数上使用str(),或者在字符串上使用int()将字符串转换为int或者反转更有效率?

假设转换的数量是相等的,将字符串转换为整数还是反过来效率更高?

+3

我不知道,但它似乎并没有被你的程序的瓶颈呢。 – 2012-07-27 11:51:44

+2

这听起来很像过早的优化。我相信你可以通过考虑其他事情来更有用地花费你的时间。 – 2012-07-27 11:51:58

回答

10
$ python -m timeit "int('92184') == 92184" 
1000000 loops, best of 3: 0.482 usec per loop 
$ python -m timeit "str(92184) == '92184'" 
1000000 loops, best of 3: 0.241 usec per loop 

你走了,你应该将ints转换为字符串并进行比较。请注意,这只是如果你想看看他们是否等于。如果你的意思是要找出哪个更大,这是行不通的,你应该转换为int。使用str在使用int与336微秒时579微秒:

通过产生预1000张的随机数与-1'000'000之间1'000'000扩展在上述试验给出了关于相同的结果。

请注意,这很可能是不成熟的优化,正如评论中所述。 这意味着,你应该觉得第一有关可能影响你的方式代码的其他因素,如可读性和功能,以及脚本完成时,如果它是缓慢的,使用profiler并找出你应该把优化工作。

+1

当你比较''20“'和'”100“'时,你可能会对快乐的结果感到满意吗? – geoffspear 2012-07-27 12:14:09

+0

@Wooble好点,我已经更新了答案,指出了这一点。 – 2012-07-27 12:20:04

1

我真的不知道“比较”究竟是什么意思,但如果它不总是只有严格的例证,你最好使用整数。你可能需要对你的数据或其他东西进行排序,这样会更容易!

1

python 2.7和python 3.4中速度最快的似乎是使用printf样式格式将int转换为字符串。

'%i' % 92184 == '92184'

python3 -m timeit "'%i' % 92184 == '92184'" 
10000000 loops, best of 3: 0.0432 usec per loop 

python3 -m timeit "int('92184') == 92184" 
1000000 loops, best of 3: 0.284 usec per loop 

python3 -m timeit "str(92184) == '92184'" 
1000000 loops, best of 3: 0.312 usec per loop 

python2 -m timeit "'%i' % 92184 == '92184'" 
10000000 loops, best of 3: 0.102 usec per loop 

python2 -m timeit "str(92184) == '92184'" 
1000000 loops, best of 3: 0.287 usec per loop 

python2 -m timeit "int('92184') == 92184" 
1000000 loops, best of 3: 0.604 usec per loop