列表索引超出范围,但我不知道原因

2024-09-19 20:44:18 发布

您现在位置:Python中文网/ 问答频道 /正文

当你站在A的位置,你的目的地是“B”(直线)。你的汽车油箱可以容纳1公里/英里的燃油。“A”和“B”的方式有“n”个加油站,包括“A”作为第一个加油站,“B”作为最后一个加油站。 您将获得油箱“L”的容量、加油站“x”的列表以及列表“n”的长度。此外,“A”(起始位置)是“n”的第一个索引,“B”(目的地)是“n”的最后一个位置。在到达“B”(油箱在“A”处已满)之前,您必须回答所需的最小加注次数。 列表“x”中的每个数字,即x[i]是距离“a”的加油站距离

所以我写了这段代码

    totalrefill, currentrefill = 0, 0
    while currentrefill<=n:
        lastrefill = currentrefill
        while (currentrefill<n) and (x[currentrefill+1]-x[lastrefill]<=L):
            currentrefill += 1
        if currentrefill==lastrefill:
            return "IMPOSSIBLE"
        if currentrefill<=n:
            totalrefill+=1

    return totalrefill

x = [0, 2, 3.5, 5, 7, 8.5, 9.5]
L = 4
n = len(x)

print(min_refuels(x,n,L))

但我不明白为什么它显示列表索引超出范围。 如果有人收到并回答了,那就非常感谢


Tags: 距离列表returnif方式汽车直线容量
3条回答

这里n=7。因此,如果currentrefill==6,则传递第一个while条件(while currentrefill<;=n)

然后在第二个测试中,您将进行第一个测试(currentfill<;n),该测试也通过了(currentfill为6,n为7)。然后尝试测试正确的部分。为此,您需要访问x[currentrefill+1],即x[7]。 由于python中的索引从0开始,x的最后一个索引是6,这就是为什么会出现超出范围的错误

您可以通过替换<;n由<;n-1(在这种情况下不会有错误)

在python列表中,索引从0开始。 所以第一个元素是x[0],第二个元素是x[1]等等, 因此,列表中的最后一个元素具有索引len(x) -1,因此x[n]超出范围

在代码中编写while currentrefill<=n:lastrefill = currentrefillx[lastrefill]这将导致x[n],因为lastrelly=currentrelly<=N这就是错误的来源

为了解决这个问题,您可以将while currentrefill<=n:更改为while currentrefill<n:,将while (currentrefill<n)更改为while (currentrefill<n)

def min_refuels(x, n, L):

    total_refill_count, refill_station, current_station = 0, 0, 0

    while current_station < n - 1:

        if x[current_station + 1] - x[refill_station] >= L:
            refill_station = current_station
            total_refill_count += 1

        current_station += 1

    return total_refill_count

x = [0, 2, 3.5, 5, 7, 8.5, 9.5]
L = 4
n = len(x)

print(min_refuels(x, n, L))

相关问题 更多 >