Ваша логика сбита с толку, почему вы выполняете итерацию по списку удаления, del1
, а затем внутри итерации по s
(или l
).
Это не имеет смысла.
Вместо этого просто удалите элементы из del1
, как вы идете.
l = [1,5,10,5,10]
del1 = [5,10]
a = []
for element in l:
if element in del1:
del1.remove(element)
else:
a.append(element)
давая a
как [1, 5, 10]
.
Более эффективный способ - использовать объект collections.Counter
.
import collections
l = [1,5,10,5,10]
del1 = [5,10]
a = []
dels_to_go = collections.Counter(del1)
for element in l:
if dels_to_go[element]:
dels_to_go[element] -= 1
else:
a.append(element)
, который дает тот же вывод, что и раньше.
Обратите внимание, у вас может возникнуть желание использовать set()
, но это не сработает в случае del1
, содержащего повторяющиеся значения.
Использовать ==
на объектах выполнить сравнение идентификационных данных.
Именно это реализация по умолчанию equals()
делает, но каждый обычно переопределяет equals()
служить "эквивалентным содержанием" проверка.
Поведение по умолчанию равняется (), должен сравнить два объекта с помощью == оператор. Таким образом, если Вы хотите использование поведения по умолчанию ==, если Вы хотите свое переопределенное использование поведения, равняется ().