Рубрики
Без рубрики

Как удалить предметы из списка во время итерации?

Резюме: Чтобы удалить элементы из списка во время итерации, используйте любой из следующих способов. Понимание списка, обратная итерация с методом удаления (), функция LAMBDA с методом Filter (), функциями с копией (), POP () и Append (). Давайте начнем с определения точной проблемы, которую вы хотите решить. Проблема: Учитывая список. Как удалить предметы … Как удалить элементы из списка во время итерации? Прочитайте больше “

Автор оригинала: Shubham Sayon.

Резюме : Чтобы удалить элементы из списка во время итерации, используйте любой из следующих способов.

  • Понимание списка ,
  • Обратная итерация с Удалить () метод,
  • Лямбда функция с Фильтр () Метод или
  • Хотя петля с Копировать () , POP () и Добавить () Функции.

Давайте начнем с определения точной проблемы, которую вы хотите решить.

Проблема: Учитывая список. Как удалить элементы из списка во время итерации через них.

Очень просто и неэффективный подход к нашей проблеме может быть итерацией через Список и удаление требуемого элемента в соответствии с данным состоянием с использованием Удалить () метод. Давайте посмотрим, почему использование такого подхода может быть катастрофическим для нашего кода.

Пример: Предположим, что у нас есть список [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Отказ Мы хотим удалить все предметы менее 5. Теперь следуйте программе, приведенной ниже:

li = list(range(10))
for b in li:
    if b < 5:
        li.remove(b)
print(li)

«Ожидаемый выход» Для вышеуказанной программы есть [5, 6, 7, 8, 9] Отказ Тем не менее, выход, который мы фактически получаем, совершенно отличаются от наших ожиданий.

Фактический выход:

[1, 3, 5, 6, 7, 8, 9]

Теперь вам может быть интересно, что только что произошло? Нет ошибки в условиях определенной, то почему мы получаем ошибочный выход. Без проблем!!! Причина вполне проста и очевидна, как только вы посмотрите на визуальное, что именно происходит с нашим кодом.

Из приведенного выше объяснения объяснения мы можем вывести, что итератор не имеет представления о удаленном элементе списка и достижения следующего пункта без каких-либо хлопот. Но, как только элемент удален, он заменяется следующим элементом.

Например: в первой итерации 0 удаляется в зависимости от нашего условия и заменяется на 1. Однако итератор перемещается на следующую позицию, которая теперь содержит значение 2 вместо 1. Это вызывает состояние нашей программы неверно истолковывать, что приводит к неправильному выходу.

Теперь, когда у нас есть обзор проблемы определения, давайте посмотрим на вероятные решения нашей проблемы.

Во-первых, давайте начнем с обзора:

Упражнение : Запустите код. Выход то же самое для каждого метода?

Давайте погрузиться глубже в каждый из методов.

Способ 1: использование списка понимание

Самое простое решение нашей проблемы состоит в том, чтобы создать понимание списка, а затем отфильтровать список источников для хранения значений на основе данного состояния. Попределения списка являются эффективным способом создания новых списков из других списков/по монтажам.

Давайте посмотрим на следующую программу, чтобы понять концепцию:

li = list(range(10))
li[:] = [x for x in li if x >= 5]
print(li)

Выход:

[5, 6, 7, 8, 9]

ВНИМАНИЕ: избегайте использования чрезвычайно длинного списка, чтобы сделать код пользователя, а также избегать кода сложности .

Метод 2: обратная итерация

Другой обходной путь к нашей проблеме – небольшой трюк. Вместо того, чтобы как обычно, вы можете пройти через элементы, вы можете перебраться через элементы в обратном порядке. Это гарантирует, что никакие элементы не пропущены. Удивительно, как?

Это связано с тем, что удаление элемента в обратном порядке повлияет только на эти предметы, которые уже были обработаны. А Список может быть изменено с использованием обратный () функция. Давайте посмотрим на следующий код, чтобы понять эту концепцию:

li = list(range(10))
for x in reversed(li):
    if x < 5:
        li.remove(x)
print(li)

Выход:

[5, 6, 7, 8, 9]

Способ 3: Использование функции лямбда

Использование функции Lambda может быть сложно, но она часто предоставляет быстрые решения нашим проблемам. Мощность функции лямбда также может быть использована в этом случае.

Примечание: A Фильтр () Функция в Python может использоваться для приема функции и списка в качестве аргумента. Его можно использовать для отфильтровывания элементов из последовательности на основе функции.

Следующая программа демонстрирует, как мы можем использовать Lambda, чтобы перебраться через список на основе нашего условия:

li = list(range(10))
li = list(filter(lambda x: (x >= 5), li))
print(li)

Выход:

[5, 6, 7, 8, 9]

Способ 4: Использование цикла While для POP и добавления элементов

Еще одна работа для нашей проблемы можно использовать цикл во время итерации через каждый элемент в списке и извлечь их из списка в переменную один за другим. Затем проверьте состояние на каждый элемент и добавьте их в другой список соответственно. После того, как результирующий список будет готов, мы сможем скопировать вновь созданный список в исходный список, а затем удалить временный список (для сохранения пространства памяти).

  • POP (): POP () Метод представляет собой встроенный метод Python, который используется для удаления указанного Python индекс Отказ Если индекс не предоставлен, то он удаляет последний элемент из списка.
  • Добавить () : Добавить () Метод представляет собой встроенный метод Python, который используется для добавления элемента в конец существующего списка, не влияя на ранее существующие элементы в списке.
  • дель : дель Ключевое слово используется для удаления определенного индекса или целый список.

Теперь, когда мы прошли некоторые основные терминологии, чтобы решить нашу проблему, давайте посмотрим на следующую программу, чтобы понять использование вышеуказанной концепции. (Пожалуйста, следуйте комментариям, чтобы получить лучшее сцепление в коде.)

li = list(range(10))

# creating a temporary list to store the items that meet the criteria
temp = []

# while loop to loop through the list
while li:

    # variable x holds the items of the list one by one. pop() is used to extract them from the list.
    x = li.pop()
    if x >= 5:
        # appending or adding the items that meet the criteria to the temp list
        temp.append(x)

# the temp list stores items in the reverse order. So copy them to li using reversed()
li = list(reversed(temp.copy()))

# delete the temp list to save memory
del temp
print(li)

Выход:

[5, 6, 7, 8, 9]

Вывод

Из вышеперечисленного обсуждения мы можем смело сказать, что, чтобы итерации через данный список и удаление элементов в соответствии с данным состоянием мы можем использовать:

  • понимание списка или
  • обратная итерация или
  • функция лямбда или
  • общее время петли с использованием POP () и Добавить () Функции.

Понимание списка всегда является лучшим решением по сравнению с использованием функции фильтра, потому что A Фильтр () или карта () Функция в программе Python может быть немного быстрее в обычных сценариях, но при использовании с функцией лямбда она всегда медленнее по сравнению с пониманием списка.

Тем не менее, вы можете бесплатно использовать любой вариант, который соответствует вашим потребностям.

Я надеюсь, что вы нашли эту статью полезную, и это поможет вам перейти через список и удалить элементы на основе данного состояния. Оставайтесь настроенными для более интересных статей, поступающих в будущем.

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Я профессиональный Python Blogger и Content Creator. Я опубликовал многочисленные статьи и создал курсы в течение определенного периода времени. В настоящее время я работаю полный рабочий день, и у меня есть опыт в областях, таких как Python, AWS, DevOps и Networking.

Вы можете связаться со мной @: