Удалить элемент списка без мутации

Предположим, у вас есть список

>>> m = ['a','b','c']

Я хотел бы создать новый список n, в котором есть все, кроме заданного элемента в m (например, элемент 'a'). Однако, когда я использую

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

исходный список мутирован (значение 'a' удаляется из исходного списка). Есть ли способ получить новый список sans- 'a' без изменения оригинала? Поэтому я хочу сказать, что m должен быть [ 'a', 'b', 'c' ], и я получу новый список, который должен быть [ 'b', 'c' ].

Ответ 1

Я предполагаю, что вы хотите создать новый список без данного элемента вместо изменения исходного списка. Один из способов - использовать понимание списка:

m = ['a', 'b', 'c']
n = [x for x in m if x != 'a']

n теперь является копией m, но без элемента 'a'.

Другим способом, конечно, было бы скопировать список в первую очередь

m = ['a', 'b', 'c']
n = m[:]
n.remove('a')

Если вы удаляете значение по индексу, оно еще проще

n = m[:index] + m[index+1:]

Ответ 2

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

l = ['a','b','c']
[s for s in l if s!='a']

Ответ 3

Другой подход к пониманию списка - это тупой:

>>> import numpy
>>> a = [1, 2, 3, 4]
>>> list(numpy.remove(a,a.index(3)))
[1, 2, 4]

Ответ 4

Есть простой способ сделать это, используя встроенную функцию: фильтр.

Вот пример топора:

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