Кто-нибудь знает, почему функция Python list.append
не называется list.push
, так как там уже есть list.pop
, который удаляет и возвращает последний элемент (который индексируется в -1) и list.append
семантичен в соответствии с этим использованием
Почему Python "добавляет" не "push"?
Ответ 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 немного меньше, а стек "немного поплю", если вы положите пластину обратно, она "надавит" на стопку. Поэтому, если вы считаете, что список как стек, а последний элемент - сверху, то вам не должно быть путаницы.