我一直在尝试解决代码战争的问题,对于这个问题,我的代码返回一个
<块引用>第 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
答案 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)