【问题标题】:More efficient to convert string to int or inverse?将字符串转换为 int 或 int 更有效?
【发布时间】:2012-07-26 02:17:21
【问题描述】:

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

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

【问题讨论】:

  • 我不知道,但它似乎不是你程序的瓶颈。
  • 这听起来很像过早的优化。我相信你可以通过考虑其他事情来更有效地利用你的时间。

标签: python string int type-conversion performance


【解决方案1】:

python 2.7 和 python 3.4 中最快的似乎是使用 printf 样式格式将 int 转换为 string。

'%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

【讨论】:

    【解决方案2】:
    $ 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 个随机数来扩展上述测试,结果大致相同:使用 int 时为 579 微秒,而使用str 时为 336 微秒.

    请注意,这很可能是过早的优化,如 cmets 中所述。 这意味着您应该首先考虑可能影响您编码方式的其他注意事项,例如可读性和功能,并且当您的脚本完成时,如果它很慢,请使用profiler 并找出应该将优化工作重点放在哪里。

    【讨论】:

    • 当您比较 "20""100" 时,您是否会对良好、快速的结果感到满意?
    • @Wooble 好点,我已经更新了答案以指出这一点。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2014-07-11
      • 1970-01-01
      • 2011-10-02
      • 2011-03-06
      相关资源
      最近更新 更多