【问题标题】:I'm getting an index error out of range in my code我的代码中出现超出范围的索引错误
【发布时间】:2019-10-27 11:50:20
【问题描述】:

代码

对行排序的数组进行排序 a 的大小为 m,b 的大小为 n

t=int(input())
for i in range(0,t):
    n,m,k=map(int,input().split())
    a=list(map(int,input().split()))
    b=list(map(int,input().split()))
j=0
x=0
y=0
c=[]
while x!=m and y!=n:
    if a[x]<b[y]:
        c.append(a[x])
        x+=1
        #j+=1
    elif a[x]==b[y]:
        c.append(a[x])
        x+=1
        y+=1
        #j+=1
    else:
        c.append(b[y])
        y+=1
while x<m:
        c.append(a[x])
        x+=1
while y<n:
        c.append(b[y])
        y+=1

错误:

c.append(b[y]) IndexError: 列表索引超出范围

这是我遇到的错误以及为什么会这样。 我什至还没有定义数组 c 的大小,所以为什么会出现问题

【问题讨论】:

  • 我没有收到错误,但想知道如果 x[x]==b[y],为什么 x 和 y 都会递增(即 x+=1 和 y+=1)。似乎您可以删除此条件并将其上方的条件从 a[x]
  • 看起来b 数组的大小不是n,但如果您不向我们展示说明b 大小的代码,我们将无法对其进行审核。另外,从你的身份来看,还不清楚每个循环中的内容。

标签: python indexing


【解决方案1】:

欢迎来到 StackOverflow!希望这会有所帮助

c.append(b[y]) IndexError: 列表索引超出范围

在python中,列表中的所有项目都可以使用它们的索引,即在列表中的位置。

在代码c.append(b[y])中,有两部分

  1. b[y] 意味着,=> 从列表 b 获取索引 y 处的项目。

现在假设您有一个列表[0, 1, 2, 3, 4]。如您所见,此列表只有 5 个元素。现在,如果我要求 python 在索引 6 或 7 或 10 处获取一个元素,如何获取?因此,通知用户您引发了这个 IndexError 异常。

  1. 将获取的项目附加到列表 c。在这可能发生之前,发生了上述错误,所以这部分从未发生过。

确保不发生 IndexError 的一种方法是使用如下 if 条件

if y < len(b):
    c.append(b[y])

注意list 更像是一个链表而不是数组。所以你不需要指定长度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多