Почему Python "добавляет" не "push"?

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

Ответ 1

Потому что "append" существовал задолго до того, как подумали "поп". Python 0.9.1 поддерживается list.append в начале 1991 года. Для сравнения, здесь часть обсуждения на comp.lang.python о добавлении популярности в 1997 году. Guido писал (а):

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

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

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

Другими словами, для стеков, реализованных непосредственно в виде списков Python, которые уже поддерживают быстрый append() и del list [-1], имеет смысл, что list.pop() работает по умолчанию для последнего элемента. Даже если другие языки делают это по-другому.

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

Ответ 2

Потому что он добавляет; он не толкает. "Добавление" добавляет к концу списка, "pushing" добавляет к фронту.

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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]

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

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

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

Ответ 8

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

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

Ответ 9

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

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

Править: Ничего себе, святой педантизм.

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

Ответ 10

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

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