如有错误,请在评论区指正
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)