将字符串转换为int或反转更有效?

时间:2012-07-27 11:49:41

标签: python string int type-conversion performance

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

假设转换量相等,将字符串转换为整数会更有效吗?反之亦然?

3 个答案:

答案 0 :(得分: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

你去了,你应该将int转换为字符串并进行比较。请注意,如果您想查看它们是否相等,这是有效的。如果您想找出哪个更大,这将无效,您应该转换为int

通过在-1'000'000和1'000'000之间预先生成1000个随机数来扩展上述测试得到大致相同的结果:使用int时使用579而使用时使用336使用{ {1}}。

请注意,这很可能是过早优化,如评论中所述。 这意味着您应该首先考虑关于可能影响您编码方式的其他注意事项,例如可读性和功能,以及脚本完成后,如果速度很慢,请使用一个profiler并找出应该集中优化工作的地方。

答案 1 :(得分:1)

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

答案 2 :(得分: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