首页 > 解决方案 > 当我所做的只是遍历列表的长度时,为什么会出现索引超出范围错误?

问题描述

我正在编写代码来解决以下问题:给定一个整数列表,对奇数进行排序并将偶数留在列表中的位置。

例如: [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' 从源数组的长度中取值减去一个 - 那么它为什么会抛出错误?

标签: pythonindexing

解决方案


您正在循环,而指针的长度小于或等于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

推荐阅读