Python实现归并排序遇IndexError:列表赋值索引越界问题求助
问题根源:辅助数组初始化错误
嘿,这问题我太熟了——你在初始化辅助数组vetorAux的时候犯了Python特有的语法错误!
错误原因分析
你写的:
vetorAux = [] * len(vetorNum)
在Python里,空列表乘以任何整数结果还是空列表。比如[] * 5得到的是[],而不是一个长度为5的列表。这和Java里new Comparable[n]创建指定长度数组的逻辑完全不一样!
当你后续在归并过程中尝试给vetorAux[i]赋值时,因为vetorAux是空的,根本不存在索引i,自然就抛出IndexError: list assignment index out of range了。
修正方案
把辅助数组的初始化改成:
vetorAux = [None] * len(vetorNum)
这样会创建一个长度和vetorNum一致的列表,每个位置初始化为None,之后你就可以正常通过索引赋值了,和Java里的数组初始化逻辑对齐。
额外提示
Sedgewick的实现之所以提前创建一次辅助数组,是为了避免在递归过程中反复分配内存,提升效率。如果你是在Python里实现,这个思路没问题,但一定要注意Python列表和Java数组的初始化差异——Python里没有直接创建指定长度空列表的语法,必须用占位符(比如None)来填充。
内容的提问来源于stack exchange,提问作者F.G.
相关产品推荐
相关产品推荐

