python 模仿字符串split函数

如有错误,请在评论区指正

txt = "Google#Runoob#Taobao#Facebook"
x = txt.split("#",2)
y = txt.split("#")
# print(x)
# print(y)
def mysplit(input:str, separator:str =" ", num:int =-1):
    '''
    模仿字符串自带的split
    :param input:输入的字符串
    :param separator:分隔符,默认是空格
    :param num:分割数量
    :return:列表
    '''
    list = []
    start_index = [] #记录分隔符出现的位置
    length = len(input)
    for i in range(length):
        if input[i] ==separator:
            start_index.append(i)
    # print(start_index)
    index_length = len(start_index)
    #num分四种情况
    if num <0 or index_length<=num:
        #负数为全部分割 or 大于分隔符数量返回全部分割结果
        begin = 0 #记录input数组范围下限
        for i in range(index_length):
            list.append(input[begin:start_index[i]])#按照start_index切割字符串
            begin = start_index[i]+1 #更新
        list.append(input[start_index[-1]+1:])
        return list
    elif num ==0:
        #0为返回作为列表整个字符串
        list.append(input)
        return list
    elif len(start_index)>num:
        #小于分隔符数量则返回对应数量的分割结果,字符串剩余内容则在返回列表的最后一个
        begin = 0
        for i in range(num):
            list.append(input[begin:start_index[i]])
            begin = start_index[i] + 1
        list.append(input[start_index[num-1] + 1:])
        return list
res = mysplit(txt,"#",2)
# res = mysplit(txt,"#",0)
# res = mysplit(txt,"#",-6)
print(res)

这样可以实现,但两次for循环浪费了性能。
下面是改良版,简化代码,让算法在一个for循环内完成工作

txt = "Google#Runoob#Taobao#Facebook"
def mysplit(input:str, separator:str =" ", num:int =-1):
    '''
    模仿字符串自带的split
    :param input:输入的字符串
    :param separator:分隔符,默认是空格
    :param num:分割数量
    :return:列表
    '''
    split_list = []
    if num == 0: #num为0时返回列表形式的字符串
        split_list.append(input)
        return split_list
    num = num if num >= 0 else -1 #过滤负数num
    separator_index = 0 #记录分隔符位置
    separator_num = 0 #记录分隔符数量
    length = len(input)
    begin = 0 #记录input左区间
    for i in range(length):
        if input[i] ==separator:
            separator_num += 1
            if num+1 == separator_num:#分隔符数量大于用户需要分割的数量时,直接跳过
                break
            split_list.append(input[begin:i])
            separator_index = i
            begin = i+1
    split_list.append(input[separator_index + 1:]) #加上最后一个分隔符以后的字符串内容
    return split_list
res = mysplit(txt,"#",2)
print(res)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值