← Все вопросы

Как удалить ВСЕ вхождения значения из списка, а не одно?

Задан 19 месяцев назад561 просмотров2 ответа
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 месяцев назад

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект