Pop: примеры (PYTHON)

Использование метода 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; // 30
30

В 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):

Пример python
stack = []
stack.append("task1")
stack.append("task2")
while stack:
    current_task = stack.pop()
    print(f"Выполняется: {current_task}")
Выполняется: task2
Выполняется: task1

Безопасное удаление из словаря с логированием:

Пример python
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' не найден

Изменение списка во время итерации с конца для безопасного удаления:

Пример python
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() для перемешивания списка:

Пример python
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]

Извлечение значения и немедленная проверка с помощью тернарного оператора:

Пример python
data = {"count": 42}
threshold = data.pop("count") if data.get("count") is not None else 0
print(f"Порог установлен: {threshold}")
Порог установлен: 42

питон pop function comments

En
Pop Remove and return item