鱼C论坛

 找回密码
 立即注册
查看: 1253|回复: 8

[已解决]关于isdecimal()、isdigit()、isnumeric()的效率问题

[复制链接]
发表于 2022-1-25 16:22:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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()最慢,但结果恰恰相反
请问有人能解释一下么
最佳答案
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
所以真实结果与您得出的恰恰相反!


懂了吗?懂了就给个好评呗!!!

打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!

屏幕截图 2022-01-25 160424.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-25 16:34:08 | 显示全部楼层
应该是因为,我说是应该,是我认为:
因为 isdecimal 是最严的,所以要排除的选项更多,
而 另外两个因为一个比一个宽松,所以要去排除的条件也就少。
虽然不知道对不对,但我知道,这与我们编程没有什么关系,没必要去这么刨根问底。

懂了吗?懂了就给个好评呗!!!

打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这些函数的运行思路肯定不是一个个去排除啊.......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-25 16:57:56 | 显示全部楼层
所以我也觉得怪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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
所以真实结果与您得出的恰恰相反!


懂了吗?懂了就给个好评呗!!!

打字不易!请给个好评!!!
兄弟!给个好评!求求了!!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-25 17:28:13 | 显示全部楼层
感谢兄弟好评!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你这中看不中用啊
屏幕截图 2022-01-25 212108.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-25 21:23:59 | 显示全部楼层
python爱好者. 发表于 2022-1-25 17:11
我知道您的错误原因了:
您在测试时用的应该是 timeii.timeit(),
而不是 timeit.repait(),

.
屏幕截图 2022-01-25 2121080.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-26 06:05:35 | 显示全部楼层
鹅鹅鹅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 09:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表