Python列表索引超出范围-算法

Fre*_*j31 3 python algorithm mergesort

我有这个错误,可以循环遍历一个数组,但我不知道该怎么做。但我试图插入0代替p1p2p3。那行得通。但是如果我运行这段代码。

该程序要做的是对两个数组进行排序,并以正确的顺序设置它们。

Arr2 = [2,5,6,8]

Arr1_Length = len(Arr1)
Arr2_Length = len(Arr2)

FinishArr_Length = Arr1_Length + Arr2_Length

FinishArr = []

p1 = 0
p2 = 0
p3 = 0

print(FinishArr)
print(FinishArr_Length)
print(Arr1[p1])
print(Arr2[p2])

while p3 < FinishArr_Length:
    if Arr1[p1] < Arr2[p2]:
        FinishArr.append(Arr1[p1])
        p1 += 1
    else:
        FinishArr.append(Arr2[p2])
        p2 += 1
    p3 += 1

print(FinishArr)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Traceback (most recent call last):
  File "Test.py", line 21, in <module>
    if Arr1[p1] < Arr2[p2]:
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)

Pra*_*dhi 5

您必须检查p1和p2是否不超过其各自数组的长度:

while p1<Arr1_Length and p2<Arr2_Length:
    if Arr1[p1] < Arr2[p2]:
        FinishArr.append(Arr1[p1])
        p1 += 1
    else:
        FinishArr.append(Arr2[p2])
        p2 += 1
    p3 += 1
Run Code Online (Sandbox Code Playgroud)

之后,您必须检查Arr1或Arr2的元素是否剩余,并将剩余值推入FinishArr

if p1<Arr1_Length:
    while p1<Arr1_Length:
        FinishArr.append(Arr1[p1])
        p1 += 1
if p2<Arr2_Length:
    while p2<Arr2_Length:
        FinishArr.append(Arr2[p2])
        p2 += 1
Run Code Online (Sandbox Code Playgroud)