为什么python列表有pop()而没有push()

有人知道为什么Python的list.append函数没有被称为list.push吗?因为已经有一个list.pop删除并返回最后一个元素(索引为-1),而且list.append语义与该用法一致?

270399 次浏览

因为它附加了;它没有推力。“追加”添加到列表的末尾,“推”添加到列表的前面。

想想队列和堆栈。

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

更准确地复述我的第二句话,“追加”非常清楚地意味着向列表的结束中添加一些东西,而不管底层实现如何。当一个新元素被“推送”时,它被添加到哪里就不太清楚了。压入堆栈是将一些东西放在“顶部”,但它在底层数据结构中的实际位置完全取决于实现。另一方面,压入队列意味着将其添加到末尾。

因为它将元素追加到列表中?Push通常用于引用堆栈。

可能是因为Python的原始版本(CPython)是用C编写的,而不是c++。

列表是通过将内容添加到某个内容的后面而形成的,这种想法可能不像添加内容那样广为人知。

因为“append”直观地表示“在列表的末尾添加”。如果它被称为“push”,那么就不清楚我们是在列表的尾部还是头部添加东西。

Push是定义好的堆栈行为;如果你把A推到堆栈(B,C,D)你会得到(A,B,C,D)

如果使用python追加,结果数据集看起来像(B,C,D,A)

编辑:哇,神圣的迂腐。

我假设从我的例子中可以清楚地看出,列表的哪一部分是顶部,哪一部分是底部。假设我们大多数人从左到右阅读,那么任何列表的第一个元素总是在左边。

无论如何这都不是一个正式的答案(只是基于语言的猜测),但Python允许你将列表用作堆栈(例如,本教程第5.1.1节)。然而,列表首先仍然是列表,因此对两者都通用的操作使用列表术语(即追加)而不是堆栈术语(即推)。由于pop操作在列表中并不常见(尽管可以使用'removeLast'),他们定义了pop()而不是push()。

好的,这是个人观点,但是Append和Prepend意味着在一个集合中的精确位置。

Push和Pop是可以应用于一套游戏的任何一端的概念。只要你始终如一……出于某种原因,对我来说,Push()似乎应该适用于一个集合的前面…

供你参考,创建一个有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)

...我还没有使用链表来实现堆栈。

因为“append”早在“pop”出现之前就已经存在了。Python 0.9.1支持的列表。1991年初追加。相比之下,下面是关于1997年添加pop的comp.lang.python的讨论的一部分。圭多写道:

要实现堆栈,需要 要添加list.pop()原语(和 不,我不反对这个 基于任何原则的人)。 可以添加List.push () 与list.pop()对称,但我不是 我很喜欢用多个名字 同样的操作,迟早的事 你会读到使用 另一个,所以你需要学习 两者都有,这是更大的认知负荷

你还可以看到他讨论了push/pop/put/pull应该在元素[0]或元素[-1]之后的想法,他发布了一个对Icon列表的引用:

我仍然认为这是最好的 在列表对象之外 实现——如果你需要一个堆栈, 或者是一个队列 语义,写一个小类 使用列表

换句话说,对于直接作为Python列表实现的堆栈(Python列表已经支持快速append()和del list[-1]), list.pop()在默认情况下工作在最后一个元素上是有意义的。即使其他语言有不同的做法。

这里隐含的是,大多数人都需要向列表添加内容,但很少有人会将列表视为堆栈,这就是为什么使用list。Append出现得更早。

“推”和“推”在自助餐厅或自助餐厅里的一堆盘子或托盘的比喻中是有意义的,特别是那些在架子下面有弹簧的盘子,所以最上面的盘子(或多或少……理论上),无论它下面有多少个板块,它都在同一个地方。

如果你移开一个托盘,弹簧上的重量会减轻一点,堆叠就会“弹出”一点,如果你把盘子放回去,它就会“推”下堆叠。所以如果你把这个列表看作一个堆栈,最后一个元素在最上面,那么你应该不会有太多的困惑。

PEP 20——Python的禅:

应该有一种——最好只有一种——明显的方法来做到这一点。

同时拥有list.appendlist.push将是做同一件事的两种方式——list.append首先出现。

我是一个python新手,对于我自己,我使用这个:

def push(one, array):
array.append(one)
def pop(array):
if len(array) > 0:
one = array[len(array)-1]
del array[len(array)-1]
return one
else:
return None
def pop_first(array):
if len(array) > 0:
one = array[0]
del array[0]
return one
else:
return None

pop_first ()是从列表的开头开始添加(与pop ()相反)

我不使用附加只是为了使我的代码更具可读性(从我的角度来看),因为我也在JS, flutter和PHP中编码,函数名称的相似性是重要的。