tommyyu 发表于 2022-1-25 16:22:03

关于isdecimal()、isdigit()、isnumeric()的效率问题

本帖最后由 tommyyu 于 2022-1-25 16:43 编辑

isdecimal()、isdigit()、isnumeric()都是判断字符串是否为数字构成的字符串方法。区别如下(小甲鱼视频里有):
                                                                  | isdecimal()的返回值| isdigit() 的返回值| isnumeric()的返回值|
+----------------------------------------------------------+--------------------------+---------------------+-------------------------|
|判断由数字组成的字符串 (例:"123")               |             True            |          True          |            True         |
+----------------------------------------------------------+--------------------------+----------------------+------------------------|
|判断由2等符号组成的字符串(例:"22")             |            False            |          True         |             True         |
+----------------------------------------------------------+--------------------------+----------------------+------------------------|
|判断由罗马数字组成的字符串(例:"ⅠⅡⅢ")    |             False            |          False      |            True         |
+----------------------------------------------------------+--------------------------+---------------------+-------------------------|
|判断由汉字组成的字符串(例:"一壹")         |         False             |          False         |         True            |
+----------------------------------------------------------+-------------------------+---------------------+-------------------------+
isdecimal()只判断数字, isdigit()判断数字和特殊的数字(如2),isnumeric()判断数字和不同语言的字符。直觉上来讲,执行效率应该是isdecimal()最快,isdigit()其次,isnumeric()最慢,但结果恰恰相反
请问有人能解释一下么

python爱好者. 发表于 2022-1-25 16:34:08

应该是因为,我说是应该,是我认为:
因为 isdecimal 是最严的,所以要排除的选项更多,
而 另外两个因为一个比一个宽松,所以要去排除的条件也就少。
虽然不知道对不对,但我知道,这与我们编程没有什么关系,没必要去这么刨根问底。

懂了吗?懂了就给个好评呗!!!
{:10_257:}{:10_297:}{:10_281:}{:10_298:}
打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
{:10_254:}{:10_254:}{:10_254:}{:10_254:}

青出于蓝 发表于 2022-1-25 16:49:47

python爱好者. 发表于 2022-1-25 16:34
应该是因为,我说是应该,是我认为:
因为 isdecimal 是最严的,所以要排除的选项更多,
而 另外两个因为 ...

所以要排除的选项更多
这些函数的运行思路肯定不是一个个去排除啊.......

python爱好者. 发表于 2022-1-25 16:57:56

所以我也觉得怪{:10_277:}

python爱好者. 发表于 2022-1-25 17:11:15

我知道您的错误原因了:
您在测试时用的应该是 timeii.timeit(),
而不是 timeit.repait(),
所以真正的结果应该是如此:
x = timeit.timeit("'123'.isdecimal()",number = 100)
x
6.199999916134402e-06

x = timeit.timeit("'123'.isdigit()",number = 100)
x
6.8999997893115506e-06

x = timeit.timeit("'123'.isnumeric()",number = 100)
x
9.499999578110874e-06
所以真实结果与您得出的恰恰相反!


懂了吗?懂了就给个好评呗!!!
{:10_257:}{:10_297:}{:10_281:}{:10_298:}’
打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
{:10_254:}{:10_254:}{:10_254:}{:10_254:}

python爱好者. 发表于 2022-1-25 17:28:13

感谢兄弟好评!!!

tommyyu 发表于 2022-1-25 21:21:55

python爱好者. 发表于 2022-1-25 17:11
我知道您的错误原因了:
您在测试时用的应该是 timeii.timeit(),
而不是 timeit.repait(),


你这中看不中用啊{:10_262:}

tommyyu 发表于 2022-1-25 21:23:59

python爱好者. 发表于 2022-1-25 17:11
我知道您的错误原因了:
您在测试时用的应该是 timeii.timeit(),
而不是 timeit.repait(),


.

python爱好者. 发表于 2022-1-26 06:05:35

鹅鹅鹅
页: [1]
查看完整版本: 关于isdecimal()、isdigit()、isnumeric()的效率问题