python字符批量替换时间加速优化

一、普通字符遍历检索没有正则检索快

虽然是有点闲话多说的意思,不过这个的优化是提升字符处理速度的最大可提升效果。博主从最初的for…in…字符串一个一个提取判断改为正则判断,这个提升速度是直观感觉的出来的。
这里放几个正则信息链接:
python同时替换多个字符串方法https://blog.csdn.net/qq_30638831/article/details/81153011
史上最全常用正则表达式大全https://www.cnblogs.com/fozero/p/7868687.html

二、一定长度内的数组使用取值比数组出入栈操作快

由于博主对字符串检索中元素存在可包含关系比如abc在abcd内,所以不能使用正则链接一中替换法(也可能是博主正则技术还不到位,但不影响得出这些看法),博主通过Python的正则split和findall方法,得到一个字符串的非检索字符数组和检索字符数组,相当于用检索字符数组填入非检索字符数组间就形成原数据字符串,检索字符串数组是要处理替换为需要改变的字符,最终在合成完整的处理后字符串中遇到了这个选择,验证信息如下:

list1 = []     # 将检索数组(list2)间隔插入非检索数组(list3)的完整数组
list1_len = len(list2) + len(list3)
starr = time.time()
# 第一种数组取值合成总数组
for i in range(0, list1_len):
    if i % 2 == 0:
        list1.append(list3[i//2])
    else:
        list1.append(list2[i//2])
allstr = ''.join(list1)

# 第二种数组出入栈合成,由于合成的数组是反的需要进行反向,也将时间计算在内了
for i in range(0, list1_len):
    if i % 2 == 0:
        list1.append(list3.pop())
    else:
        list1.append(list2.pop())
allstr = ''.join(list1[::-1])

endd = time.time()
print("数组总长:{len},耗费时间:{time}".format(len=str(list1_len), time=str(endd-starr)))

总的结果出入栈合成时间:
数组总长:625,耗费时间:0.0002186298370361328
数组取值合成时间:
数组总长:625,耗费时间:0.0001685619354248047
数组长度一样的情况下,平均快0.00005不到点,这个时间随着数组变长,数组取值时间越长差距会越小,到达一定上千上万或几十万的数组长度,出入栈合成就会比取值快(按原理推理)。

三、简单计算判断比赋值判断快

上述出入栈合成的赋值判断写法验证

check = False
for i in range(0, list1_len):
    if not check:
        list1.append(list3.pop())
        check = True
    else:
        list1.append(list2.pop())
        check = False
allstr = ''.join(list1[::-1])

时间消耗
数组总长:625,耗费时间:0.0002334117889404297
比最上面测试慢了0.000015左右,当然这个计算只是适合不太复杂的计算情况,也对于这种重复性操作减少赋值步骤也能提升一定效率。

虽然优化的效果不是很明显,针对的也是不是太大的数据,但有一点是一点,不等同于并发多线程递归这些通过资源置换提速。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值