Pop: примеры (PYTHON)
pop(key/index[, default]): AnyОписание функции pop
Метод pop() в Python предназначен для удаления элемента из коллекции. Он используется для изменения содержимого списка или словаря. В зависимости от типа данных поведение функции различается.
Для списков (list) метод pop() удаляет элемент по указанному индексу и возвращает его значение. Синтаксис: list.pop([index]). Необязательный аргумент index задаёт позицию элемента для удаления (по умолчанию равен -1, что соответствует последнему элементу). При успешном выполнении возвращается удалённый элемент. Если индекс выходит за пределы списка, возникает исключение IndexError.
Для словарей (dict) метод pop() удаляет элемент по указанному ключу и возвращает его значение. Синтаксис: dict.pop(key[, default]). Обязательный аргумент key задаёт ключ для удаления. Необязательный аргумент default возвращается, если ключ отсутствует в словаре. Если ключ не найден и значение default не задано, возникает исключение KeyError.
Примеры использования
Работа с методом pop() для списка:
my_list = [10, 20, 30, 40]
removed_item = my_list.pop()
print(removed_item)
print(my_list)40 [10, 20, 30]
Удаление элемента по индексу:
my_list = ["a", "b", "c"]
removed_item = my_list.pop(1)
print(removed_item)
print(my_list)b ["a", "c"]
Использование с отрицательным индексом:
my_list = [5, 15, 25]
removed_item = my_list.pop(-2)
print(removed_item)
print(my_list)15 [5, 25]
Работа с методом pop() для словаря:
my_dict = {"a": 1, "b": 2, "c": 3}
removed_value = my_dict.pop("b")
print(removed_value)
print(my_dict)2
{"a": 1, "c": 3}Использование значения по умолчанию:
my_dict = {"x": 100}
removed_value = my_dict.pop("y", "Ключ не найден")
print(removed_value)
print(my_dict)Ключ не найден
{"x": 100}Похожие функции в Python
list.remove(value) удаляет первый элемент в списке, равный заданному значению. Метод не возвращает удалённый элемент и вызывает ValueError, если значение не найдено. Используется, когда известно значение, а не индекс.
del statement (оператор del) удаляет элемент по индекту или срез из списка, а также ключ из словаря. Оператор не возвращает удалённое значение. Применяется для удаления без необходимости получения значения.
dict.popitem() удаляет и возвращает пару ключ-значение из словаря. В версиях Python 3.7+ удаляется последняя добавленная пара. Полезен для работы со словарём как с очередью LIFO.
collections.deque.popleft() удаляет и возвращает элемент с левого конца двусторонней очереди. Эффективен для реализации FIFO-очередей.
Аналоги в других языках
В JavaScript метод pop() удаляет последний элемент массива и возвращает его. Для удаления по индексу применяют splice().
let arr = [1, 2, 3];
let last = arr.pop();
console.log(last, arr);3 [1, 2]
В PHP функция array_pop() удаляет последний элемент массива.
$arr = [10, 20, 30];
$last = array_pop($arr);
echo $last; // 3030
В Java у ArrayList есть метод remove(int index), возвращающий удалённый элемент.
ArrayList list = new ArrayList<>(Arrays.asList("A", "B"));
String removed = list.remove(0); // "A" A
В C# метод List.RemoveAt(int index) удаляет элемент по индексу, но не возвращает значение. Для получения значения сначала обращаются по индексу.
В Go отсутствует встроенная функция, аналогичная pop. Для срезов удаление выполняют с помощью срезов или функций.
slice := []int{1, 2, 3}
index := 1
removed := slice[index]
slice = append(slice[:index], slice[index+1:]...)
fmt.Println(removed, slice)2 [1 3]
В SQL (например, PostgreSQL) оператор DELETE ... RETURNING удаляет строки и возвращает удалённые данные.
DELETE FROM products WHERE id = 10 RETURNING name;Возвращает имя удалённого товара.
Типичные ошибки
Попытка удаления из пустого списка приводит к IndexError.
empty_list = []
element = empty_list.pop()IndexError: pop from empty list
Удаление из словаря несуществующего ключа без значения по умолчанию вызывает KeyError.
d = {"a": 1}
value = d.pop("b")KeyError: 'b'
Использование индекса нецелого типа для списка.
lst = [1, 2, 3]
lst.pop("1")TypeError: 'str' object cannot be interpreted as an integer
Передача в метод словаря pop() более двух аргументов.
d = {}
d.pop("key", "default", "extra")TypeError: pop expected at most 2 arguments, got 3
Изменения в последних версиях
Специфика метода pop() для списков и словарей остаётся неизменной в последних основных версиях Python. С версии Python 3.7 словари сохраняют порядок вставки элементов, поэтому метод dict.pop() удаляет элемент с заданным ключом, не влияя на относительный порядок оставшихся элементов. Изменений в сигнатуре или поведении метода в Python 3.8-3.12 не было.
Расширенные примеры
Имитация обработки стека (LIFO):
stack = []
stack.append("task1")
stack.append("task2")
while stack:
current_task = stack.pop()
print(f"Выполняется: {current_task}")Выполняется: task2 Выполняется: task1
Безопасное удаление из словаря с логированием:
config = {"theme": "dark", "lang": "ru"}
keys_to_remove = ["theme", "debug"]
for key in keys_to_remove:
value = config.pop(key, None)
if value is None:
print(f"Ключ '{key}' не найден")
else:
print(f"Удалён ключ '{key}' со значением {value}")Удалён ключ 'theme' со значением dark Ключ 'debug' не найден
Изменение списка во время итерации с конца для безопасного удаления:
numbers = [1, 2, 3, 4, 5, 6]
for i in range(len(numbers)-1, -1, -1):
if numbers[i] % 2 == 0:
removed = numbers.pop(i)
print(f"Удалён чётный элемент: {removed}")Удалён чётный элемент: 6 Удалён чётный элемент: 4 Удалён чётный элемент: 2
Использование pop() для перемешивания списка:
import random
ordered = [1, 2, 3, 4, 5]
shuffled = []
while ordered:
idx = random.randrange(len(ordered))
shuffled.append(ordered.pop(idx))
print(shuffled)[3, 1, 5, 2, 4]
Извлечение значения и немедленная проверка с помощью тернарного оператора:
data = {"count": 42}
threshold = data.pop("count") if data.get("count") is not None else 0
print(f"Порог установлен: {threshold}")Порог установлен: 42