Удаление элемента из списка приводит к тому, что список становится NoneType

Я предполагаю, что есть простое решение, которое я пропускаю. Лучше так, чем сложно, не так ли?

Проще говоря:

var = ['p', 's', 'c', 'x', 'd'].remove('d')

заставляет var иметь тип None. Что здесь происходит?


person Joseph_Renerr    schedule 05.11.2014    source источник
comment
Вы используете .remove неправильно? Вы имеете в виду .pop?   -  person g.d.d.c    schedule 05.11.2014
comment
Нет, pop — это удаление элемента из определенного места в списке, насколько я помню. Я хочу удалить определенный элемент (например, «d»).   -  person Joseph_Renerr    schedule 05.11.2014
comment
В качестве примечания: многие случаи использования remove (а также index и других методов поиска по списку) являются признаками проблем с дизайном. Возможно, вам следует использовать set, или, может быть, у вас есть или должен быть индекс, но вы его не используете и т. д. Это определенно не всегда правда, но об этом стоит подумать.   -  person abarnert    schedule 05.11.2014


Ответы (2)


remove ничего не возвращает. Он изменяет существующий список на месте. Задание не нужно.

Заменять

var = ['p', 's', 'c', 'x', 'd'].remove('d') 

с

var = ['p', 's', 'c', 'x', 'd']
var.remove('d') 

Теперь var будет иметь значение ['p', 's', 'c', 'x'].

person Kevin    schedule 05.11.2014
comment
Да, это делает это. Я мог бы иметь меч, я пробовал это. Ок, спасибо за ответ! Отмечу как отвеченный через 11 минут, когда позволит. - person Joseph_Renerr; 05.11.2014
comment
В общем, почти любой метод, изменяющий объект в Python, возвращает None или, по крайней мере, что-то отличное от self. (Исключениями являются в основном особые случаи, такие как __iadd__, или методы, специфичные для предметной области, из фреймворков, которые имеют свои собственные идиомы.) - person abarnert; 05.11.2014
comment
На самом деле в моем случае даже это ничего не возвращает - person user32882; 13.02.2018
comment
@ user32882, возможно, стоит составить минимально воспроизводимый пример и опубликовать новый вопрос, а затем - person Kevin; 13.02.2018
comment
Я понял, что совершаю ту же глупую ошибку, что и ОП. Я хлопнул себя по лбу, и теперь все в порядке. - person user32882; 13.02.2018

remove изменяет список на месте и возвращает None. Вы должны поместить его в переменную, а затем изменить это:

>>> var = ['p', 's', 'c', 'x', 'd']
>>> var.remove('d')   # Notice how it doesn't return anything.
>>> var
['p', 's', 'c', 'x']
person anon582847382    schedule 05.11.2014