有没有人知道为什么list.append
没有调用Python的函数list.push
,因为已经有一个list.pop
删除并返回最后一个元素(索引为-1)并且list.append
语义与该用法一致?
And*_*lke 231
因为"追加"在"流行"之前很久就存在了.Python 0.9.1在1991年初支持list.append.相比之下,这是关于在1997年添加pop的comp.lang.python讨论的一部分.Guido 写道:
要实现一个堆栈,需要添加一个list.pop()原语(不,我不会在任何原则的基础上反对这个特定的).可以使用list.pop()添加list.push()以保持对称性,但我不是同一操作的多个名称的忠实粉丝 - 迟早你会读取使用另一个的代码,所以你需要学习两者,这是更多的认知负荷.
您还可以看到他讨论了如果push/pop/put/pull应该在元素[0]或元素[-1]之后,他发布了对Icon列表的引用的想法:
我仍然认为所有这些最好不在列表对象实现中 - 如果你需要一个具有特定语义的堆栈或队列,写一个使用列表的小类
换句话说,对于直接作为Python列表实现的堆栈,已经支持快速append()和del list [-1],有意义的是list.pop()默认在最后一个元素上工作.即使其他语言的表达方式不同.
这里隐含的是大多数人需要附加到列表中,但是更少的人有机会将列表视为堆栈,这就是为什么list.append更早出现的原因.
Mat*_*all 15
因为它附加; 它没有推动."追加"增加了一个列表的末尾,"推动"增加了前面.
想想一个队列与一个堆栈.
http://docs.python.org/tutorial/datastructures.html
编辑:为了更准确地改写我的第二句话,"追加"非常清楚地意味着在列表的末尾添加一些内容,而不管底层实现如何.在"推送"时添加新元素的地方不太清楚.推入堆栈是将某些东西置于"顶部",但实际上它在底层数据结构中的位置完全取决于实现.另一方面,推入队列意味着将其添加到最后.
因为"追加"直观地意味着"在列表的末尾添加".如果它被称为"推",那么我们不清楚我们是在尾部还是在列表的顶部添加东西.
无论如何都不是官方答案(只是基于使用语言的猜测),但Python允许您将列表用作堆栈(例如,本教程的第5.1.1节).但是,列表仍然首先是列表,因此两者共用的操作都使用列表术语(即追加)而不是堆栈术语(即推送).由于弹出操作在列表中并不常见(尽管可能已经使用了"removeLast"),因此他们定义了pop()而不是push().