Python使用变量实现substring功能时报类型错误该如何解决?
问题说明
Python 没有独立的 substring 方法,你用到的字符串切片语法 s[start:end] 就是实现子串截取的标准方式,触发类型错误的原因是切片要求传入的 start、end 参数必须为整数,而你的代码中除法运算得到了浮点数。
错误原因
Python 3 中 / 运算符默认返回浮点数类型,比如 (3-1)/2 得到的结果是 1.0 而非整数 1,将浮点数传入切片参数就会触发类型错误。
修复方法
把代码中计算 start、end 时用到的普通除法 / 替换为整数除法运算符 // 即可,// 会返回整数结果,符合切片参数要求。
修正后的完整代码如下:
for i in range(len(s)): len1 = self.expandFromMiddle(s,i,i) len2 = self.expandFromMiddle(s,i,i+1) len3 = max(len1,len2) if len3 > end - start: start = i - ((len3 - 1) // 2) end = i + (len3 // 2) return s[start:end+1]
注:末尾切片增加
+1是因为Python切片是左闭右开区间,原有逻辑要截取到end位置的字符需要把结束下标+1,避免丢失最后一位字符。
扩展说明
- 整数除法
//会自动向下取整,完美适配奇偶长度回文的下标计算:- 回文长度为奇数时(如len3=3):
(3-1)//2 = 1,3//2 =1,得到的start=i-1、end=i+1,切片覆盖3个字符 - 回文长度为偶数时(如len3=2):
(2-1)//2 =0,2//2=1,得到的start=i、end=i+1,切片覆盖2个字符
- 回文长度为奇数时(如len3=3):
内容的提问来源于stack exchange,提问作者user14370029
相关产品推荐
相关产品推荐

