← Все вопросы
Как удалить ВСЕ вхождения значения из списка, а не одно?
13
list.remove(x) убирает только первое вхождение. Хочу выкинуть из списка вообще все элементы, равные значению. Как лучше — в цикле через remove или как-то иначе?
2 ответа
22
✓ Принятый ответ — помог автору
Не удаляйте в цикле через remove или по индексам, пока итерируетесь по тому же списку — пропустите элементы. Самый чистый способ — собрать новый список без ненужного значения:
nums = [1, 2, 3, 2, 4, 2]
nums = [x for x in nums if x != 2]
print(nums) # [1, 3, 4]
Если важно менять список на месте (чтобы другие ссылки на него тоже обновились), используйте срезовое присваивание: nums[:] = [x for x in nums if x != 2].
Антон Киселев Трюк с nums[:] = ... недооценён, спасибо · 19 месяцев назад
-3
Просто делай while 2 in nums: nums.remove(2).
Никита Масленко Так нельзя на больших списках — это O(n²), каждый remove заново сканирует список · 19 месяцев назад
Дарк Драгон Comprehension и быстрее, и читаемее · 19 месяцев назад
Ваш ответ
Войдите, чтобы ответить на вопрос.