Удалить элемент списка без мутации
Предположим, у вас есть список
>>> 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)