我有两个列表:
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]:
为什么将i
和j
定义为0时会出现此错误?
如果列表不为空,列表索引如何超出范围?
答案 0 :(得分:1)
问题是,当用尽一个列表时(将所有四个元素都添加到sortiert
中时,相应的索引将增加到4。在下一个循环迭代中,您尝试比较{ {1}},导致故障。
当剩下的所有元素都在一个列表中时,您将无法处理这种情况。
您可以通过参考有关如何实现Python合并排序的任何参考资料来了解如何合并两个列表。
将来,学习插入策略性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)上,因为一旦列表超出范围,如果您尝试不断循环遍历,它将抛出并超出范围错误。