Python中使用String.strip()导致字符串分割出现字符遗漏的问题排查
问题排查与解决方案
核心问题:错误使用strip()方法
你的splitArray函数里,string = string.strip(string[:2])这行代码是导致字符遗漏的关键原因。strip()方法的作用是移除字符串首尾所有包含在参数中的字符(是字符集合,不是完整子串),而不是截取掉前两个字符后的剩余部分。
举个具体例子:当处理到字符串"GrBl"时,string[:2]是"Gr",strip("Gr")会把字符串首尾所有的G和r字符都移除——这就导致原本应该保留的Gr被错误剥离,后续循环处理的字符串彻底混乱,最终出现分割错误和字符遗漏的情况。
修复方案
把strip()替换成字符串切片操作string[2:],这才是正确截取前两个字符之后剩余部分的方式。另外还有一个隐藏问题:KleurenShort是全局变量,多次调用splitArray会导致旧数据累加,建议把它移到函数内部作为局部变量。
修正后的完整代码:
kleuren = ["Rood","Geel","Groen","Blauw","Wit","Paars","Oranje","Zwart"] def splitArray(string): KleurenShort = [] # 改为局部变量,避免多次调用累加旧数据 # 用len(string)//2确定循环次数,逻辑更清晰 for _ in range(len(string) // 2): KleurenShort.append(string[:2]) print(KleurenShort) string = string[2:] # 用切片替代strip,正确截取剩余字符串 return KleurenShort def tekst_naar_kleur(string): return 0 def matchFirst2Letters(ShortArray, LongArray): for idx, short in enumerate(ShortArray): # 用enumerate同时获取索引和元素,代码更易读 long_word = LongArray[idx] if long_word[:2] == short: print(long_word) print(idx) # 测试修正后的函数 matchFirst2Letters(splitArray("RoGeGrBl"), kleuren)
测试结果
调用splitArray("RoGeGrBl")后,输出会完全符合你的预期:
['Ro'] ['Ro', 'Ge'] ['Ro', 'Ge', 'Gr'] ['Ro', 'Ge', 'Gr', 'Bl']
同时matchFirst2Letters也会正确匹配到对应的颜色:
Rood 0 Geel 1 Groen 2 Blauw 3
额外优化建议
- 变量名拼写修正:把
lenght改为length(虽然不影响运行,但符合代码规范) tekst_naar_kleur函数目前返回固定值0,你可以根据实际需求补充它的功能
内容的提问来源于stack exchange,提问作者Capmare David Nicusor




