为什么Python的“追加”不是“推”?

有没有人知道为什么Python的list.append函数不称为list.push ,因为已经有一个list.pop删除并返回最后一个元素(索引在-1)和list.append语义是一致的使用?

因为“追加”早在“stream行”被想到之前就存在了。 Python 0.9.1在1991年初支持list.append。相比之下,这是comp.lang.python关于在1997年添加pop的讨论的一部分。Guido写道:

为了实现一个堆栈,需要添加一个list.pop()原语(不,我不反对任何原则的基础上)。 list.push()可以添加与list.pop()的对称性,但我不是同一个操作多个名称的大粉丝 – 迟早你会阅读使用另一个的代码,所以你需要学习,这是更多的认知负荷。

你也可以看到他讨论了如果push / pop / put / pull应该在元素[0]之后或者元素[-1]之后发布引用图标列表的想法:

我仍然认为,所有这些最好从列表对象实现中排除 – 如果你需要一个栈或一个特定的语义的队列,写一个使用列表的小类

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

这里隐含的是大多数人需要追加到列表中,但更less有机会将列表视为堆栈,这就是为什么list.append早已进入的原因。

因为它附加; 它不推动。 “追加”添加到列表的最后,“推”添加到前面。

想想一个队列与一个堆栈。

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

编辑:更准确地说我的第二个句子,“附加”非常清楚,意味着添加一些东西到列表的末尾 ,而不pipe底层的实现。 在“推”时添加新元素的位置不太清楚。 推入一个堆栈是把东西放在“顶部”,但它实际上在底层数据结构中的位置完全取决于实现。 另一方面,推入队列意味着将其添加到最后。

因为它将一个元素添加到列表中? 推送通常用于引用堆栈。

因为“追加”直观意味着“添加在列表的末尾”。 如果被称为“推”,那么我们不清楚是否在尾部或头部添加东西。

不是任何方式的正式答案(只是基于使用该语言的猜测),但Python允许您使用列表作为堆栈(例如本教程的5.1.1节 )。 然而,列表首先是一个列表,所以这两个操作都使用列表术语(即追加)而不是栈术语(即push)。 由于pop操作在列表中并不常见(尽pipe可以使用removeLast),所以它们定义了pop()而不是push()。

好的,这里有个人看法,但是Append和Prepend意味着在一组中的精确位置。

Push和Pop是真正的概念,可以应用到任何一个集合的末尾…只要你一致…出于某种原因,对我来说,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] 

一个堆栈是一个有点抽象的数据types。 “推”和“爆”的想法在很大程度上与堆栈实际上如何实现无关。 例如,你可以理论上实现这样一个堆栈(尽pipe我不知道你为什么会这样做):

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

…我还没有使用链表来实现一个堆栈。

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

把事物推到某个东西上形成一个清单的想法可能不像追加它的想法那样广为人知。

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

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

编辑:哇,圣洁的儿子。

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

Push和Pop对于​​自助餐厅或自助餐中的一叠盘子或托盘的比喻是有意义的,特别是在下面有一个弹簧的托架types,所以顶板(或多或less…在理论上)在同一个地方,不pipe它下面有多less个盘子。

如果取下一个托盘,弹簧的重量就会减less一点,如果将托盘放回去,它会“popup”一小块,然后“向下”推动托盘。 所以如果你把这个列表看作一个堆栈而把最后一个元素看作是最上层的话,那么你就不应该有太多的困惑。