Есть ли простой способ удалить элемент списка по значению?

Либо регулярное выражение (получение последнего появления\n в строке и удаление его), либо простой $name = substr($name, 0, -2) выполнит трюк

856
задан daaawx 3 April 2019 в 18:58
поделиться

6 ответов

Чтобы удалить первое появление элемента в списке, просто используйте list.remove:

>>> a = ['a', 'b', 'c', 'd']
>>> a.remove('b')
>>> print a
['a', 'c', 'd']

Имейте в виду, что он не удаляет все вхождения вашего элемента. Используйте для этого понимание списка.

>>> a = [10, 20, 30, 40, 20, 30, 40, 20, 70, 20]
>>> a = [x for x in a if x != 20]
>>> print a
[10, 30, 40, 30, 40, 70]
1477
ответ дан 22 November 2019 в 21:06
поделиться

это - мой ответ, просто используйте в то время как и для

def remove_all(data, value):
    i = j = 0
    while j < len(data):
        if data[j] == value:
            j += 1
            continue
        data[i] = data[j]
        i += 1
        j += 1
    for x in range(j - i):
        data.pop()
-1
ответ дан 22 November 2019 в 21:06
поделиться

Вы можете сделать

a=[1,2,3,4]
if 6 in a:
    a.remove(6)

, но выше нужно искать 6 в списке 2 раза, поэтому попробуйте, кроме как быстрее

try:
    a.remove(6)
except:
    pass
77
ответ дан 22 November 2019 в 21:06
поделиться

Найти значение в списке, а затем удалить этот индекс (если он существует) проще, просто используя метод удаления списка:

>>> a = [1, 2, 3, 4]
>>> try:
...   a.remove(6)
... except ValueError:
...   pass
... 
>>> print a
[1, 2, 3, 4]
>>> try:
...   a.remove(3)
... except ValueError:
...   pass
... 
>>> print a
[1, 2, 4]

Если вы делаете это часто, вы можете обернуть его в функцию:

def remove_if_exists(L, value):
  try:
    L.remove(value)
  except ValueError:
    pass
8
ответ дан 22 November 2019 в 21:06
поделиться

Вот как это сделать на месте (без понимания списка):

def remove_all(seq, value):
    pos = 0
    for item in seq:
        if item != value:
           seq[pos] = item
           pos += 1
    del seq[pos:]
15
ответ дан 22 November 2019 в 21:06
поделиться

Обычно Python выдает исключение, если вы говорите ему сделать что-то, чего он не может, поэтому вам придется сделать либо:

if c in a:
    a.remove(c)

, либо:

try:
    a.remove(c)
except ValueError:
    pass

Исключение не обязательно плохо, если оно тот, которого вы ожидаете, и с которым справитесь должным образом.

173
ответ дан 22 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: