Python希尔排序代码中for循环出现TypeError:float对象无法转为整数
解决希尔排序代码中的'float' object cannot be interpreted as an integer错误
问题根源在这行代码:distance = distance / 2。Python里普通除法/不管操作数是不是整数,返回结果都是浮点数。比如当distance等于1时,1/2得到0.5,这时候distance变成了浮点数,但range()函数要求参数必须是整数,所以触发了这个报错。
修复方法很简单,把普通除法换成整数除法//,修改后的代码如下:
## Shell Sort def ShellSort(list): distance = len(list) // 2 while distance > 0: for i in range(distance, len(list)): temp = list[i] j = i while j >= distance and list[j - distance] > temp: list[j] = list[j - distance] j = j - distance list[j] = temp # 用整数除法保证distance始终为整数 distance = distance // 2 return list
整数除法//会自动向下取整,既符合希尔排序步长逐步减半的逻辑,又能确保distance全程都是整数类型,不会再出现类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Syrup
相关产品推荐
相关产品推荐

