python统计字符串中大小写字符个数的性能实测与分析

给定一个字符串,统计字符串中大写字符个数,有如下三种方法:

python 复制代码
# method1
s1 = len(re.findall(r'[A-Z]',content))
# method2
s2 = sum(1 for c in content if c.isupper())
# method3
s3 = 0
for c in content:
    if c.isupper()==True:
        s3+=1

经过多次实测后,方法1是最快的,方法3是最慢的。下面是其中某一次的实际时间消耗:

复制代码
(method1) upper char count by re:0.11256217956542969s
(method2) upper char count by for-sum:0.36724019050598145s
(method3) upper char count by for-loop:0.5580060482025146s

改为统计字符串中大写字符个数和小写字符个数后:

python 复制代码
s11 = len(re.findall(r'[A-Z]',content))
s12 = len(re.findall(r'[a-z]',content))


s21 = sum(1 for c in content if c.isupper())
s22 = sum(1 for c in content if c.isupper())


s3 = 0
s4 = 0
for c in content:
    if c.isupper()==True:
        s3+=1
    else:
        s4+=1

性能也满足上面的规律:

复制代码
upper char count by re:0.40007758140563965s
upper char count by for-sum:0.6471347808837891s
upper char count by for-loop:0.918128252029419s

原因分析:

  • 正则表达式在匹配上是有算法优化过的
  • 正则只处理26个英文字母,而其他方法要处理所有字符(包括特殊符号等等),这样其他方法处理的字符数量比正则这种方法要多
相关推荐
派大鑫wink2 分钟前
【Day21】NIO入门:通道、缓冲区与非阻塞IO基础
java·开发语言
quant_19862 分钟前
BTC 行情预警系统实战教程
开发语言·后端·python·websocket·程序人生·金融
查拉图斯特拉面条5 分钟前
JMeter JSR223后置处理器:JSON数据处理与格式转换实战指南
python·jmeter·json
世转神风-7 分钟前
qt-基础打印-不换行打印
开发语言·qt
岁岁的O泡奶12 分钟前
NSSCTF_crypto_[SWPUCTF 2023 秋季新生赛]dpdp
经验分享·python·算法·密码学
smj2302_7968265212 分钟前
解决leetcode第3791题.给定范围内平衡整数的数目
python·算法·leetcode
m0_7381207216 分钟前
渗透测试——靶机DC-6详细横向过程(Wordpress渗透)
服务器·网络·python·web安全·ssh·php
Ralph_Y25 分钟前
C++数据库操作
开发语言·数据库·c++
superman超哥26 分钟前
Rust 日志级别与结构化日志:生产级可观测性实践
开发语言·后端·rust·可观测性·rust日志级别·rust结构化日志
CryptoPP27 分钟前
对接BSE交易所获取数据。
python·金融·数据挖掘·数据分析·区块链