列出索引超出范围,我不知道为什么?

时间:2021-04-21 09:27:54

标签: python arrays python-3.x list

我一直在尝试解决代码战争的问题,对于这个问题,我的代码返回一个

<块引用>

第 13 行中的“IndexError:列表索引超出范围”。

有人能解释一下原因吗?

<块引用>

您将获得一组数字。你必须对奇数进行排序 数字按升序排列,而将偶数保留在它们的位置 原始位置。

[7, 1]  =>  [1, 7], 
[5, 8, 6, 3, 4]  =>  [3, 8, 6, 5, 4] ,
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]  =>  [1, 8, 3, 6, 5, 4, 7, 2, 9, 0]
def sort_array(source_array):
    dup_arr = []

    for i in range(len(source_array)-1):
        if source_array[i]%2 != 0:
            dup_arr.append(source_array[i])

    dup_arr = sorted(dup_arr)
    j = 0
    l = 0
    for j in range(len(source_array)):
        if source_array[j] %2 != 0:
            source_array[j] = dup_arr[l]
            l += 1
    
    return source_array

2 个答案:

答案 0 :(得分:1)

乍一看 - 检查 dup_array 的大小是否符合您的要求。特别是,检查 for i in range(len(source_array)-1): 是否遍历您想要的所有值。也许那一行有一个逐一错误?

答案 1 :(得分:1)

如果你已经调试你的程序并且 print(">>", dup_arr) 你会发现你错过了最后一个奇数,因为你的范围错误,它应该是 range(len(source_array))

for i in range(len(source_array)):
    if source_array[i] % 2 != 0:
        dup_arr.append(source_array[i])

知道你可以直接对值进行迭代,这样在不需要索引时语法会更好

for val in source_array:
    if val % 2 != 0:
        dup_arr.append(val)
相关问题