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

3

我遇到了一个错误,我能够循环遍历数组,但是我不知道正确的做法。但我已经尝试将p1p2p3替换为0,这样可以解决问题。但如果运行以下代码:

这个程序的作用是对两个数组进行排序,并将它们按正确的顺序设置。

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)

我遇到了以下错误:

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

1
Arr1是什么? - abhi1610
也许你的Arr1是一个空列表,你能告诉我Arr1里面有什么吗? - prs_wjy
如果你想对两个数组进行排序,可以使用sorted(Arr1);如果你想使用合并排序对它们进行排序,可以使用sorted(Arr1+Arr2) - abhi1610
1个回答

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

接下来,您需要检查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

1
谢谢。第二个例子有帮助。非常感谢。 - Fredrikj31

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接