Удаление элементов из вложенных список

сталкнулся с тем, что есть необходимость удалять определенные элементы из отдельного подсписка главного списка. И казалось бы, в чем проблема, берем remove и полетели, но вся беда в том, что в подсписках списка элемнты могут совпадать и remove удалит и их. Что делать? Как удалить конкретный элемент подсписка главного списка, если он может быть и в других подсписках списка?

for i in range(len(text)):
        newMassiv = []
        for j in range(len(text)):
            newMassiv.append((random.choice(SubMassive[i])))                
            SubMassive[i].remove(newMassiv[j])
        massive.append(newMassiv)

Ответы (1 шт):

Автор решения: Nonen_Hook

Есть несколько различных способов подойти к этой проблеме.

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

Вот пример того, как этот подход мог бы работать:

# Создайте новый список, содержащий только те элементы, которые мы хотим сохранить
filtered_list = filter(lambda x: x not in SubMassive[i], text)

# Добавьте отфильтрованный список в основной список
massive.extend(filtered_list)

В качестве альтернативы вы могли бы использовать цикл for для перебора элементов в подсписке и использовать ключевое слово del для удаления каждого элемента из основного списка. Этот подход потенциально может вызвать проблемы, если один и тот же элемент появляется в нескольких подсписках, но он может быть более эффективным, чем использование метода фильтрации, если у вас есть только небольшое количество элементов для удаления.

Вот пример того, как этот подход мог бы работать:

# Используйте цикл for для перебора элементов в подсписке
for element in SubMassive[i]:
    # Используйте ключевое слово del, чтобы удалить каждый элемент из основного списка
    del text[element]

# Добавьте остальные элементы из основного списка в новый список
massive.extend(text)
→ Ссылка