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

2020/10/31 16:11 · python ·  · 0评论

有谁知道为什么list.append不调用Python的函数list.push,因为已经有一个list.pop可以删除并返回最后一个元素(索引为-1)并且list.append语义与该用法一致的原因?

因为“ append”早在想到“ pop”之前就已存在。受Python 0.9.1支持的list.append于1991年初。通过比较,这是在comp.lang.python上讨论的有关在1997年添加pop的一部分。Guido写道:

要实现一个堆栈,需要添加一个list.pop()原语(不,基于任何原则,我都不反对这个特定的堆栈)。可以添加list.push()使其与list.pop()对称,但是我不太喜欢针对同一操作使用多个名称-早晚要读取使用另一个名称的代码,所以您需要同时学习两者,这会增加认知负担。

您还可以看到他讨论了是否应该在元素[0]或元素[-1]之后或在元素[-1]之后发布推/弹出/放/拉的想法,在那里他发布了对Icon列表的引用:

我仍然认为最好将所有这些都排除在列表对象实现之外-如果您需要具有特定语义的堆栈或队列,请编写一个使用列表的小类

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

这里的隐含含义是,大多数人都需要追加到列表,但是很少有人有机会将列表视为堆栈,这就是为什么list.append出现得这么早的原因。

因为它附加;它不会推动。“追加”添加到列表的末尾,“推送”添加到列表的末尾。

想一想队列还是堆栈。

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

编辑:为了更准确地改写我的第二句话,“添加”非常清楚地意味着在列表末尾添加一些内容,而不管其基础实现如何。当一个新元素被“推”到什么地方时,还不清楚。压入堆栈是将某些东西放在“顶部”,但是其在底层数据结构中的实际位置完全取决于实现。另一方面,推入队列意味着将其添加到末尾。

因为它将元素添加到列表?推栈通常在引用堆栈时使用。

因为“添加”在直觉上意味着“在列表末尾添加”。如果将其称为“推”,则不清楚是在列表的末尾还是在列表的顶部添加内容。

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

好的,这里有个人意见,但“追加”和“前置”表示集合中的精确位置。

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)

...而且我还没有开始使用链接列表来实现堆栈。

推入是定义的堆栈行为;如果将A推入堆栈(B,C,D),您将得到(A,B,C,D)。

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

编辑:哇,修脚。

我认为从我的示例中可以清楚看出列表的哪一部分是顶部,哪一部分是底部。假设我们大多数人从左到右阅读,则任何列表的第一个元素始终将位于左侧。

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

通过将事物推入事物的背面来形成列表的想法可能不如附加事物的思想众所周知。

就自助餐厅或自助餐中一叠盘子或盘子的隐喻而言,“推”和“弹出”是有意义的,特别是在下方带有弹簧的顶托类型的托座(理论上或多或少...)在同一地方,无论下面有多少板。

如果卸下托盘,则弹簧上的重量会减轻一点,并且纸叠会“弹起”一点,如果放回盘子,则会“压下”纸叠。因此,如果您将列表视为堆栈,而将最后一个元素视为顶部,那么您就不会感到太多困惑。

本文地址:http://python.askforanswer.com/weishenmepythonliebiaojuyoupopdanmeiyoupush.html
文章标签:
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!