一、普通字符遍历检索没有正则检索快
虽然是有点闲话多说的意思,不过这个的优化是提升字符处理速度的最大可提升效果。博主从最初的for…in…字符串一个一个提取判断改为正则判断,这个提升速度是直观感觉的出来的。
这里放几个正则信息链接:
python同时替换多个字符串方法
史上最全常用正则表达式大全
二、一定长度内的数组使用取值比数组出入栈操作快
由于博主对字符串检索中元素存在可包含关系比如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左右,当然这个计算只是适合不太复杂的计算情况,也对于这种重复性操作减少赋值步骤也能提升一定效率。
虽然优化的效果不是很明显,针对的也是不是太大的数据,但有一点是一点,不等同于并发多线程递归这些通过资源置换提速。