Почему в списках python есть pop (), но не push()



кто-нибудь знает, почему в Python list.append функция не вызывается list.push учитывая, что уже есть list.pop который удаляет и возвращает последний элемент (который индексируется на -1) и list.append семантика согласуется с этим использованием?

246   10  

10 ответов:

потому что" append "существовал задолго до того, как" pop " был задуман. Python 0.9.1 список поддерживаемых.добавить в начале 1991 года. Для сравнения, вот часть обсуждение на комп.ленг.питон о добавлении pop в 1997 году. Гвидо писал:

для реализации стека необходимо чтобы добавить список.pop () примитивный (а нет, я не против именно этого один на основе любого принципа). список.push() может быть добавлен для симметрия со списком.поп (), но Я не большой поклонник нескольких имен для та же операция-рано или поздно вы собираетесь читать код, который использует другой, так что вам нужно учиться оба, что является более когнитивной нагрузкой.

вы также можете видеть, что он обсуждает идею, если push / pop / put/pull должен быть в элементе [0] или после элемента [-1], где он публикует ссылку на список значков:

Я все еще думаю, что все это лучше всего слева из списка объектов реализация-если вы нужен стек, или очередь, с определенным семантика, напишите небольшой класс, который использует списки

подразумевается, что большинству людей нужно добавлять в список, но гораздо меньше людей имеют возможность рассматривать списки как стеки, что является зачем перечислять.аппенд пришел намного раньше.

потому что он добавляет, Не толчок. "Добавление "добавляет в конец списка," нажатие " добавляет в начало.

подумайте о очереди против стека.

http://docs.python.org/tutorial/datastructures.html

Edit: чтобы перефразировать мое второе предложение более точно, "добавление" очень ясно подразумевает добавление чего-то к конец списка, независимо от базовой реализации. Где добавляется новый элемент когда его "толкают" - это менее понятно. Нажатие на стек ставит что-то на" верх", но где это на самом деле происходит в базовой структуре данных полностью зависит от реализации. С другой стороны, нажатие на очередь подразумевает добавление ее в конец.

потому что он добавляет элемент в список? Push обычно используется при обращении к стекам.

потому что" добавить "интуитивно означает" добавить в конце списка". Если бы это называлось "push", то было бы неясно, добавляем ли мы материал в хвост или во главе списка.

ни в коем случае не официальный ответ (просто предположение, основанное на использовании языка), но Python позволяет использовать списки в качестве стеков (например, раздел 5.1.1 учебника). Однако список по-прежнему является в первую очередь списком, поэтому операции, которые являются общими для обоих, используют термины списка (т. е. добавление), а не термины стека (т. е. push). Поскольку операция pop не так часто встречается в списках (хотя можно было бы использовать "removeLast"), они определили pop (), но не push ().

хорошо, личное мнение здесь, но добавление и добавление подразумевают точные позиции в наборе.

Push и Pop-это действительно понятия, которые могут быть применены к любому концу набора... Только если вы будете последовательны... По какой-то причине мне кажется, что Push() должен применяться к передней части набора...

FYI, это не так уж сложно сделать список, который имеет метод push:

>>> class StackList(list):
...     def push(self, item):
...             self.append(item)
... 
>>> x = StackList([1,2,3])
>>> x
[1, 2, 3]
>>> x.push(4)
>>> x
[1, 2, 3, 4]

стек-это несколько абстрактный тип данных. Идея "выталкивания" и "выталкивания" в значительной степени не зависит от того, как фактически реализуется стек. Например, вы можете теоретически реализовать такой стек (хотя я не знаю, почему вы это сделаете):

l = [1,2,3]
l.insert(0, 1)
l.pop(0)

...и я не стал использовать связанные списки для реализации стека.

вероятно, потому что исходная версия Python (CPython) был написан на C, а не на C++.

идея о том, что список формируется путем нажатия вещей на заднюю часть чего-то, вероятно, не так хорошо известна, как мысль о добавлении их.

Push-это определенный стек поведение; если вы нажмете A на стек (B,C,D), вы получите (A,B,C, D).

Если вы использовали python append, результирующий набор данных будет выглядеть так (B,C,D,A)

Edit: Вау, святой педантизм.

Я бы предположил, что из моего примера будет ясно, какая часть списка является верхней, а какая-нижней. Предполагая, что большинство из нас здесь читают слева направо, первый элемент любого списка всегда будет быть слева.

Push и Pop имеют смысл с точки зрения метафоры стопки тарелок или подносов в кафетерии или буфете, в частности, в типе держателя, который имеет пружину внизу, поэтому верхняя пластина (более или менее... теоретически) в одном и том же месте независимо от того, сколько пластин находится под ним.

Если вы извлекаете поднос, то вес на весне немного и стог "хлопает" вверх немного, если вы кладете плиту назад, то оно "нажимает"Эс стог вниз. Так что если вы думаете о списке, как стек и последний элемент, как находящиеся на вершине, то вы не должны иметь много путаницы.

Comments

    Ничего не найдено.