首页 > 解决方案 > 确保 str 是 int 的最快方法是什么?

问题描述

我试图确保一个字符串在 Python 3.6 中是一个 int,这里有四种方法。但是我不知道哪个最快,或者有人可以给我一个更快的吗?

import re

input_value = '012345678901'


def test1(value_str):
    value_str = value_str.lstrip('0')
    try:
        value_int = int(value_str)
    except ValueError:
        return False
    return len(str(value_int)) == len(value_str)


def test2(value_str):
    return re.match('\d+$', value_str) is not None


def test3(value_str):
    num_set = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
    for i in value_str:
        if i not in num_set:
            return False
    return True


def test4(value_str):
    return value_str.isdigit()

我用 测试了它们timeit,结果如下:

run 1000000 times test1: 0.920672991022002
run 1000000 times test2: 1.1261013330076821
run 1000000 times test3: 0.8881843989947811
run 1000000 times test4: 0.16987622604938224

编辑注释:

经过多次测试,我知道了这一点:

  1. 对于无符号数,test4是最快的。
  2. 对于带符号的数字,如果它包含'-''+'喜欢'-123'test2总是很慢,其他取决于如何删除符号。我仍然不确定。

lstrip('0')intest1就是为了这个

标签: pythonpython-3.x

解决方案


嗨,另一种选择可能是以下一种:

def test4(value_str):
    negative = value_str.find("-")
    if negative > 0:
        return False
    elif negative == 0:
        value_str = value_str[1:]
    return value_str.isdigit()

我机器上的结果是:

  • 测试1:0.798348898
  • 测试2:0.9424690370000001
  • 测试3:0.5995461930000001
  • 测试4:0.29526326800000025

推荐阅读