Глобальные и локальные переменные области видимости в Python; Удалить элемент из массива внутри цикла - PullRequest
0 голосов
/ 12 января 2020

Это код:

def deleteObj(array):
    for i in range (0, len(array)):
        if array[i]:
            if type(array[i]) == int or type(array[i]) == float:
                if int(array[i]) == 0:
                    del array[i]
        elif not array[i]:
            break

    print(array)

Итак, в конце он печатает весь массив без изменений. Я уже с ума сошел xDxDxD PS Я не могу сделать массив глобальной переменной перед публикацией внутри функции

1 Ответ

0 голосов
/ 12 января 2020

У вас есть две проблемы:

  1. if array[i]: будет ложным, когда array[i] равно None, но также и когда 0.
  2. Вы удаляете начиная с array, при итерации по нему, он будет вызывать итерацию list index out of range

Вам необходимо проверить, является ли элемент None явно, и использовать remove для копии array так что вы можете удалить предметы. Вы также можете пропустить чеки на int или float и приведение к int, они не нужны

def deleteObj(array):
    for item in list(array):
        if item is not None:
            if item == 0:
                array.remove(item)
        else:
            break

    print(array)
...