有这样的需求,曾经面试也遇到过,但是从来没有考虑过如何操作,最近在学python,就尝试一下,python基本数据类型及其操作加循环搞定,方法笨拙,有合适好的方法忘指点一下,谢谢各位大佬
代码如下:
test=input()#输入字符串 L=[]#空列表保存转出数据 end_list=[]#最终输出数据 if len(test)==1:#单个字符直接保存退出 L.append(test) print(L) exit(0) if ord(test[0])==ord(test[1])+1 or ord(test[0])==ord(test[1])-1:#前两连续字符处理 value=test[0]+test[1]#连续保存字符的值 if len(test)==2:#字符串长度为2保存退出 L.append(test) print(L) exit(0) else:#前两不连续字符处理 if len(test)==2:#长度为2保存退出 L.append(test[0]) L.append(test[1]) print(L) exit(0) else: L.append(test[0])#保存第一个字符 value=test[1]#保留第二个字符 N=ord(test[1])#保留第二个值为初始比较值 test=test[2:]#截取字符串后段 while True: for i in range(len(test)): #循环遍历 M=ord(test[i]) if i == 0 : if len(test)==1: if M==N +1 or M==N -1:#共三个参数且连续,则连接追加保存并退出 value=value+test[0] L.append(value) exit(0) else: L.append(value)#共三个参数且不连续,则直接追加保存并退出 L.append(test[0]) print(L) exit(0) else: if M == N + 1 or M == N - 1:#第三个参数连续,则连接并保存为value value = value + test[0] N = ord(test[0]) continue else: L.append(value)#第三个参数不连续,则追加并设置当前值为value value=test[0] N = ord(test[0]) continue if M > N: if M == N + 1: if M == ord(test[i - 2]):#出现65434这类情况 L.append(value)#则追加当前value值6543 value = test[i]#并设置当前字符值4为新value值 N = ord(test[i]) if i == len(test) - 1:#最后一个值则追加并跳出循环 L.append(value) break continue else: value = value + test[i]#连续则连接为value值 N = ord(test[i]) if i == len(test) - 1:#最后一个值则追加并跳出循环 L.append(value) break continue else: L.append(value)#出现不连续【34589】则追加当前value值345 value=test[i]#并设置当前字符值8为新value值 N=ord(test[i]) if i == len(test) - 1:#最后一个值则追加并跳出循环 L.append(value) break continue if M < N: if M==N-1: if M==ord(test[i-2]):#出现类似1232这类情况 L.append(value)#则追加当前value值 value=test[i]#并设置当前字符值2为新value值 N=ord(test[i]) if i == len(test) - 1:#最后一个值则追加并跳出循环 L.append(value) break continue else: value = value + test[i]#连续则连接为value值 N=ord(test[i]) if i == len(test) - 1:#最后一个值则追加并跳出循环 L.append(value) break continue else: L.append(value)#出现不连续【65421】则追加当前value值654 value=test[i]#并设置当前字符2为新value值 N=ord(test[i]) if i == len(test) - 1:#最后一个值则追加并跳出循环 L.append(value) break continue if M == N:#相等的情况234555则追加当前的value值2345 L.append(value) value=test[i]#并设置字符值5为新value值 N=ord(test[i]) if i==len(test)-1:#最后一个值则追加并跳出循环 L.append(value) break continue break for x in L: if len(x) != 1: end_list.append(x) print(L) print(end_list)结果如下:
D:\py\venv\Scripts\python.exe D:/py/str.py 1c34587643145699980123afgcdddddefdcba14568954210 ['1', 'c', '345', '876', '43', '1', '456', '9', '9', '98', '0123', 'a', 'fg', 'cd', 'd', 'd', 'd', 'def', 'dcba', '1', '456', '89', '54', '210'] ['345', '876', '43', '456', '98', '0123', 'fg', 'cd', 'def', 'dcba', '456', '89', '54', '210'] Process finished with exit code 0