面试官问:
1、面试题目:如何重写 Python 的 replace 方法(函数)
2、最终实现的效果如下例子所示
例如:现有3个字符串,分别为
a=“abcaababcbccabc”
b=“abc”
c=“123”
3、如何通过调用重写的 replace 方法:replace(a,b,c)来实现以下输出结果:
输出结果=“123aab123bcc123”
我答:
1、重写 replace 方法的核心思想
(1)、先找到 a 中替换 b 的下标,存到数组里
(2)、然后遍历下标数组即根据下标将 c 替换进去
2、Python 代码重新实现
以下为我使用 Python 语言重新实现的 replace 方法(函数),每一行都有相应的注释,请耐心看完。
def myReplace(str1, sub, dest, times =None):
#如果sub 和 dest的长度任何一个为0,直接返回原字符
if(len(sub)==0 or len(dest)==0):
return str1
#如果times是None,替换的次数是s.count(sub)
if times == None:
times = str1.count(sub)
sub_index = []
#被替换字符长度
sub_length = len(sub)
#要替换字符长度
dest_length = len(dest)
#将原字符串转成列表
str1 = list(str1)
#遍历上面转化后的字符串列表
for i in range(len(str1)):
#循环遍历到补充替换字符的索引下标值
if str1[i:i+sub_length] == list(sub):
#追加到sub_index的空列表中
sub_index.append(i)
#定义一个计数器n
n = 0
#遍历sub_index列表
for index in sub_index:
#判断替换次数
if times > 0:
#计算偏移量,因为每一次替换后原str的长度是在变化的
offset = n * (dest_length - sub_length)
#重新计算index索引下标,需要加上offset偏移量
index = index + offset
#将原字符串列表中的原字符替换为dest目标字符
str1[index:index+sub_length] = list(dest)
#计数器加1
n += 1
#替换次数减1
times -= 1
#将列表里面的内容进行拼接成字符串
return "".join(str1)
str1="abcaababcbccabc"
print(myReplace(str1,'abc','123'))
面试官反馈:
思路比较清晰,用 Python 实现的代码简洁而清晰,算不错的一个回答。继续吧,下一题。。。
欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!