Почему в этом коде появляется ошибка индекса списка python? - PullRequest
0 голосов
/ 29 апреля 2020

Вопрос в том, что вам дан список. Выведите сумму чисел в списке. Если список пуст, то печатается 0. Кроме того, элемент 7 и элемент рядом с ним не будут вносить вклад в сумму.

def realSum(arr):
    if len(arr) == 0:
        return 0
    for i in range(len(arr)-1):
        if arr[i] == 7:
            del arr[i:i+2]
    return sum(arr)

Почему этот код дает мне эту ошибку:

Traceback (most recent call last):
  File "C:/Users/welcome/PycharmProjects/ko/ko.py", line 16, in <module>
    print(realSum(arr))
  File "C:/Users/welcome/PycharmProjects/ko/ko.py", line 11, in realSum
    if arr[i] == 7:
IndexError: list index out of range

Этот код работает, когда используя некоторое время l oop, но не работает при использовании для l oop. Почему это так?

1 Ответ

0 голосов
/ 29 апреля 2020

range(len(arr)-1) вычисляется до того, как l oop начнет повторяться. Теперь давайте возьмем следующие данные:

arr = [7, 7, 7]

Таким образом, ваш l oop будет повторять следующие i s - 0,1:

  • В первой итерации где i=0, первые 2 элемента arr будут удалены, так что в arr
  • будет только один элемент Во второй итерации, где i=1, arr[i] поднимет IndexError исключение, потому что вы пытаетесь получить доступ ко второму элементу списка размером 1.

Это классический пример того, почему плохая практика - мутировать список, который вы повторяете.

...