Почему метод remove() списка python дал мне неожиданные результаты?

#python #list

Вопрос:

Я изучаю Python, и я сталкиваюсь с этим:

 x = [1,0]
x.insert(0,2)
x.remove(x[-1])
print(x)
 

и результат [2, 1] такой, какой и ожидается.

Но затем я изменяю значение для вставки на 0.

 x = [1,0]
x.insert(0,0)
x.remove(x[-1])
print(x)
 

и результат [1, 0] , который является неожиданным. Я ожидаю, что результат будет [0, 1] таким .

Что я здесь пропустил?

Комментарии:

1. remove удалит первое вхождение элемента. Смотрите help(x.remove) для получения дополнительной информации.

2. Попробуй del x[-1] вместо x.remove(x[-1]) этого .

Ответ №1:

list.remove удаляет первый элемент, равный аргументу. x[-1] значение равно 0, поэтому он удаляет первый 0, который является первым элементом вашего списка. Просто потому, что вы использовали -1 индексирование x перед вызовом list.remove , не обязательно означает, что он удалит элемент в индексе -1 .

Смотрите list.remove документацию здесь.

Вы можете вызвать list.pop , для удаления которого требуется индекс элемента, а не сам элемент. В вашем примере замена x.remove(x[-1]) на x.pop() (по умолчанию на последний индекс) даст ожидаемый результат.

Ответ №2:

list.remove удаляет первый найденный элемент, соответствующий переданному параметру. Если вы хотите просто удалить последний элемент, который вы можете использовать pop() без параметров или pop(-1) .

Из документов:

список.удалить(x) Удалите первый элемент из списка, значение которого равно x. Это вызывает ошибку значения, если такого элемента нет.

список.pop([i]) Удалите элемент в заданной позиции в списке и верните его. Если индекс не указан, a.pop() удаляет и возвращает последний элемент в списке. (Квадратные скобки вокруг i в подписи метода означают, что параметр является необязательным, а не то, что вы должны вводить квадратные скобки в этой позиции. Вы часто увидите эту запись в справочнике по библиотеке Python.)