5

Убрать все вхождения значения из списка?

14

Проблема: Удаление всех вхождений значения из списка в Python

В Python метод remove() удаляет только первое вхождение указанного значения в списке.

Как мне удалить все вхождения определенного значения из списка?

Вот что я имею в виду:

>>> remove_values_from_list([1, 2, 3, 4, 2, 2, 3], 2)
[1, 3, 4, 3]

Как мне реализовать такую функциональность?

5 ответ(ов)

7

Вы можете использовать функциональный подход для удаления всех вхождений определённого значения из списка в Python. Ниже приведены несколько способов сделать это для разных версий Python.

Python 3.x

Есть несколько вариантов:

  1. Используя функцию filter() и метод __ne__:
>>> x = [1, 2, 3, 2, 2, 2, 3, 4]
>>> list(filter((2).__ne__, x))
[1, 3, 3, 4]
  1. С использованием filter() и анонимной функции (лямбда):
>>> x = [1, 2, 3, 2, 2, 2, 3, 4]
>>> list(filter(lambda a: a != 2, x))
[1, 3, 3, 4]
  1. Используя генератор списков:
>>> [i for i in x if i != 2]
[1, 3, 3, 4]

Python 2.x

В Python 2.x можно использовать filter() с лямбда-функцией:

>>> x = [1, 2, 3, 2, 2, 2, 3, 4]
>>> filter(lambda a: a != 2, x)
[1, 3, 3, 4]

Каждый из этих методов эффективно удаляет все вхождения значения 2 из списка x. Выберите тот, который вам кажется более удобным!

2

Вы можете использовать генератор списков для этой задачи. Вот пример кода:

def remove_values_from_list(the_list, val):
    return [value for value in the_list if value != val]

x = [1, 2, 3, 4, 2, 2, 3]
x = remove_values_from_list(x, 2)
print(x)
# [1, 3, 4, 3]

В этом примере функция remove_values_from_list принимает два параметра: исходный список the_list и значение val, которое нужно удалить из списка. Мы создаем новый список, включая только те элементы, которые не равны val, и возвращаем его.

1

Вы можете использовать присваивание по срезу, если необходимо изменить исходный список, при этом оставаясь при этом в рамках эффективного использования генератора. Вот пример:

>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> x[:] = (value for value in x if value != 2)
>>> x
[1, 3, 4, 3]

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

0

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

>>> x = [1, 2, 3, 4, 2, 2, 3]
>>> while 2 in x: x.remove(2)
>>> x
[1, 3, 4, 3]

В этом коде мы используем цикл while, который проверяет, присутствует ли элемент 2 в списке x. Если это так, то с помощью метода remove мы удаляем первый найденный элемент 2 из списка. Этот процесс повторяется, пока все вхождения элемента 2 не будут удалены. В результате, после завершения цикла, список x будет содержать только те элементы, которые не равны 2.

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

0

Вы можете использовать следующий простой код для решения этой задачи:

>>> [i for i in x if i != 2]

Этот код создаст новый список, содержащий все элементы из x, кроме значения 2.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь