python - 当我所做的只是遍历列表的长度时,为什么会出现索引超出范围错误?
问题描述
我正在编写代码来解决以下问题:给定一个整数列表,对奇数进行排序并将偶数留在列表中的位置。
例如: [5, 8, 6, 3, 4] => [3, 8, 6, 5, 4]
def sort_array(source_array):
odd_number =[]
for i in range(len(source_array)):
if source_array[i] %2 != 0:
odd_number.append(source_array[i])
odd_number = sorted(odd_number)
pointer = 0
while pointer<= len(odd_number):
for i in range(len(source_array)):
if source_array[i]%2!= 0:
source_array[i] = odd_number[pointer]
pointer +=1
return source_array
我收到以下代码的索引超出范围错误:
for i in range(len(source_array)):
if source_array[i]%2!= 0:
source_array[i] = odd_number[pointer]
但我不明白这是为什么!我已经尝试在纸上运行迭代,这对我来说似乎很好,因为 'i' 从源数组的长度中取值减去一个 - 那么它为什么会抛出错误?
解决方案
您正在循环,而指针的长度小于或等于odd_number
. 您应该在指针较小时循环,因为列表的长度不是列表最后一个元素的索引。固定代码:
def sort_array(source_array):
odd_number =[]
for i in range(len(source_array)):
if source_array[i] %2 != 0:
odd_number.append(source_array[i])
odd_number = sorted(odd_number)
pointer = 0
while pointer< len(odd_number):
for i in range(len(source_array)):
if source_array[i]%2!= 0:
source_array[i] = odd_number[pointer]
pointer +=1
return source_array
推荐阅读
- testing - 技术问题!!!我可以在异步调用中使用 web_add_header 语句吗?如果是:如何,如果不是,为什么不呢?
- javascript - Lightbox++ 不透明度覆盖在视口之外失败,但在 Chrome devtools 移动视图中展开返回键。js可以在手机上模仿吗?
- python - VSCODE 不识别 db.Model 的子类化
- vim - 设置 VIM/NVIM 我遇到了困难
- c - 如何在 C 中将包含 32 个十六进制值的变量拆分为 32 个字节?
- css - 棒听者在某些桌子上不起作用
- xml - xml中的Spring集成xsd版本参考
- php - 如何向 PHP 服务器发出 post 请求
- reactjs - 当属性是 useContext 挂钩的函数类型时的 TypeScript 接口默认值
- vue.js - 当我使用dxDateBox时,如何设置只能读取上个月的月份