3

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

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

4

3 回答 3

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.

通过在 -1'000'000 和 1'000'000 之间预生成 1000 个随机数来扩展上述测试,结果大致相同:使用时为 579 微秒,而int使用. 时为 336 微秒str

请注意,这很可能是过早的优化,如评论中所述。这意味着您应该首先考虑可能影响您编码方式的其他考虑因素,例如可读性和功能,以及当您的脚本完成时,如果它很慢,请使用分析器并确定您应该将优化工作集中在哪里。

于 2012-07-27T11:53:54.837 回答
1

我真的不知道您所说的“比较”到底是什么意思,但如果它并不总是严格的平等,那么您最好使用整数。您可能需要对数据或其他任何内容进行排序,这样会更容易!

于 2012-07-27T12:00:53.923 回答
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
于 2014-12-15T20:33:55.593 回答