@jintaxi
Чуть-чуть програю для себя.

Очень странно работает форматирование массива. В чем ошибка?

У меня формируется массив, в котором есть "лишние" элементы, они, как правило, содержат в себе только лишь один элемент или и вовсе пустые.
Я беру элемент массива, проверяю какой он длинны, и если количество элементов в нем строго меньше двух, то удаляют этот элемент. Мой код (прошу прощения, если он не идеально "питоновский" -- только начинаю осваивать Python) выглядит примерно так:
for item in array:
  if len(item) <= 2:
    del array[array.index(item)]

Проблема заключается в том, что если у меня есть два подряд идущих ненужных элемента, то он удалит только один. Скажите, пожалуйста, в чем проблема и как ее исправить. Спасибо.
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
@eandr_67
web-программист (*AMP, Go, JavaScript, вёрстка).
Раз ты удаляешь элементы из массива, значит надо двигаться от конца массива к его началу. И лучше по индексам, а не по элементам.
for i in range(len(array), -1, -1):
  if len(array[i]) <= 2:
    del array[i]

Если же делать в стиле предложенного втором вопроса варианта, то эффективнее будет:
array = [array[i] for i in range(len(array)) if len(array[i]) >= 2]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Внутри for item in array нельзя удалять или добавлять элементы. Итерация слетает.

Примеров как сделать по-другому много в тут.
Ответ написан
Комментировать
@jintaxi Автор вопроса
Чуть-чуть програю для себя.
Если вдруг кто-то наткнется на этот вопрос и ему будет важен ответ, то вот этот код решает данную проблему:
array = [item for item in array if len(array[array.index(item)]) >= 2]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 17:06
15000 руб./за проект
19 апр. 2024, в 16:53
1000 руб./за проект
19 апр. 2024, в 16:45
5000 руб./за проект