Алгоритм: IndexError: список индексов вне диапазона (Python) - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в python, и я хотел знать, почему моя программа отображает "IndexError: list index out of range" для строки 4. Может кто-нибудь помочь, пожалуйста.

# A is the array and N is the size of the array.
A =[1,78,46,4,34,10,50,2]
N = len(A)
def Algorithm(A,N):
    #B <- Array[N]
    B = A[N]
    B=[0]*N
    for i in range(1,N):
        B[A[i]]+=1
        i=1
    #for i <-- 1 to N
    for j in range(1,N):
    #for k <-- to B[j]
        for k in range(0,B[j]):
            A[i]=j
            i+=1
    return

Algorithm(A,N)
print(A)

Ошибка:

  2 N = len(A)
  3 def Algorithm(A,N):
  4     B = A[N]
  5     B=[0]*N
  6     for i in range(1,N):

IndexError: индекс списка вне диапазона

Ответы [ 3 ]

1 голос
/ 02 апреля 2020

Таким образом, List index out of range взято из B = A[N], потому что N представляет общую длину A. Однако элементы списка индексируются от 0 до N-1, что дает длину (N-1) - 0 + 1 => N. Если вы хотите присвоить B последнему элементу A, вы можете сделать это с помощью B = A[N-1] или B = A[-1], поскольку отрицательные индексы указывают на элементы списка с конца. Однако, если вы переопределите B = [0] * N, вы можете покончить с первым назначением

0 голосов
/ 02 апреля 2020
A =[1,78,46,4,34,10,50,2]
N = len(A)       # N = 8
def Algorithm(A,N):
    B = A[N]     # value of N is 8 and when you try to access A[8] its out of index range since the index is from 0 to 7
    B=[0]*N
    for i in range(1,N):
        B[A[i]]+=1
        i=1
    #for i <-- 1 to N
    for j in range(1,N):
    #for k <-- to B[j]
        for k in range(0,B[j]):
            A[i]=j
            i+=1
    return

Algorithm(A,N)
print(A)

Я хотел бы указать на другие вещи, которые я отметил в вашем коде.

A =[1,78,46,4,34,10,50,2]
N = len(A)       
def Algorithm(A,N):
    B = A[N]     
    B=[0]*N  # This line overwrites the above assignment. 
    for i in range(1,N):
        B[A[i]]+=1    # B[A[i]]  -- so i guess during execution the A[i] will be a value from list A . hence B[A[i]] might become B[78] , B[46] etc (sorry if i have misunderstood)
        i=1
    #for i <-- 1 to N
    for j in range(1,N):
    #for k <-- to B[j]
        for k in range(0,B[j]):
            A[i]=j
            i+=1
    return

Algorithm(A,N)
print(A)
0 голосов
/ 02 апреля 2020

В Python первый элемент списка адресуется как ноль, а не как один. Например, чтобы получить доступ к первому элементу в списке под названием «цифры», вы должны написать numbers[0] вместо numbers[1].

В B = A[N] вы пытаетесь обратиться к последнему элементу списка A путем доступа A[N] (N соответствует длине списка A). Однако, как объяснялось ранее, вы должны минус один из этого, потому что список начинается с нуля, а не с одного. Следовательно, правильный код будет B = A[N - 1].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...