有序整数列表平方排序的Python代码错误排查
问题描述
现有算法需求:给定一个已排序的整数列表,对列表内所有元素求平方后,输出排序后的结果。
运行如下Python代码时出现异常,需要定位错误:
list = [-9, -2, 0, 2, 3] squared_list=[] for element in list: squaring = list[element] * list[element] squared_list.append(squaring) squared_list.sort() print(squared_list)
错误分析
代码的核心逻辑错误出在循环遍历部分:
- 用
for element in list语法遍历列表时,element存储的是列表里的实际元素值,不是元素的位置索引。 - 原代码写的
list[element]是把元素值当成索引去取列表内容,第一次循环拿到的元素是-9,执行list[-9]会直接触发索引越界报错:当前列表长度只有5,合法的负索引最小为-5,不存在-9这个位置。 - 额外注意:不要用
list作为自定义变量名,list是Python内置的列表类型,用它做变量名会覆盖内置的列表方法,容易引发其他难以排查的问题。
修正后代码
nums = [-9, -2, 0, 2, 3] squared_list = [] for element in nums: # 直接对遍历拿到的元素值做平方计算即可,不需要再通过索引取值 squaring = element * element squared_list.append(squaring) squared_list.sort() print(squared_list)
运行上述代码会输出正确结果[0, 4, 4, 9, 81]。
内容的提问来源于stack exchange,提问作者39 Saurav Choudhary
相关产品推荐
相关产品推荐

