在for循环之外定义列表索引会导致列表超出索引错误

时间:2020-05-12 22:55:37

标签: python list

我有两个列表:

A = [3, 7, 8, 5]

B = [6, 2, 1, 4]

k = [3, 7, 8, 5, 6, 2, 1, 4]

我想比较数字并将它们添加到第三个列表中,如下所示:

sortiert = []
x = 0
i = 0
j = 0
while x < len(k): 
    if A[i] > B[j]:
        sortiert.append(B[j])
        j += 1
    elif B[j] > A[i]:
        sortiert.append(A[i])
        i += 1
    x += 1

但是我收到此错误:

IndexError: list index out of range

对于此行:

if A[i] > B[j]:

为什么将ij定义为0时会出现此错误?

如果列表不为空,列表索引如何超出范围?

2 个答案:

答案 0 :(得分:1)

问题是,当用尽一个列表时(将所有四个元素都添加到sortiert中时,相应的索引将增加到4。在下一个循环迭代中,您尝试比较{ {1}},导致故障。

当剩下的所有元素都在一个列表中时,您将无法处理这种情况。

  1. 您可以通过参考有关如何实现Python合并排序的任何参考资料来了解如何合并两个列表。

  2. 将来,学习插入策略性A[1] > B[4]命令来跟踪程序的操作。这是一个非常基本但非常有效的调试工具。

答案 1 :(得分:1)

A = [3, 7, 8, 5]
B = [6, 2, 1, 4]

sortiert = []
x = 0
i = 0
j = 0

while x < len(A): # <- not sure what your reference to k is?
    if A[i] > B[j]:
        sortiert.append(B[j])
        j += 1
    elif B[j] > A[i]:
        sortiert.append(A[i])
        i += 1
    x += 1
    print(sortiert)

这可以在python3.7上运行,但在append函数中似乎不能正确地执行比运算符更大的操作。我将while循环附加到len(A)上,因为一旦列表超出范围,如果您尝试不断循环遍历,它将抛出并超出范围错误。