当前位置: 首页 > 面试题库 >

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

许毅
2023-03-14
问题内容

有谁知道为什么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出现得这么早的原因。



 类似资料:
  • 问题内容: python模块线程具有一个用于在其他线程中运行进程和功能的对象。该对象有一个方法,但没有方法。调用简单方法无法停止的原因是什么?我可以想象使用该方法不方便的情况… 问题答案: 可以是通用的并且有意义,因为它只是触发了线程的目标,但是通用可以做什么?根据线程在做什么,您可能必须关闭网络连接,释放系统资源,转储文件和其他流,或其他任何数量的自定义,重要任务。任何能够以通用方式甚至完成大多

  • 问题内容: 在中,我们具有接口List和类: 并扩展AbstractList和 我的问题:为什么ArrayList有该implements List条款? 如果,我们不能说吗? 问题答案: 是。可以省略。但是,这是一个立即可见List。否则,将需要额外单击代码/文档。我认为这就是原因-清晰。 并补充的评论-这是为了展示该工具。总体而言,这只是为了方便起见,并减少了List实现之间的代码重复。

  • 问题内容: 我当时正在编写一个简短的脚本来更改元素的内部文本,但是发现它没有方法。我知道那不是继承自,但似乎不是一种有用的方法吗?是否有一个具体的实施问题,我不知道阻止添加的到? 注意:我知道Dojo和jQuery 的节点列表都有某种形式。由于限制,我无法使用任何一个。 问题答案: 现在,NodeList在所有主要浏览器中都具有forEach() 原始答案 这些答案都不能解释 为什么 NodeLi

  • 问题内容: 来自Java背景,我想知道为什么Scala中没有类似Java 的字段。毕竟,使用size字段,您将能够确定时间的列表大小,那么为什么size字段被删除了? (此问题涉及Scala 2.8及更高版本中的新集合类。此外,我指的是不可变的,而不是可变的。) 问题答案: 不能说size字段已被 删除 ,因为LISP自LISP以来已经存在了50年,这种列表无处不在,并且它们在ML和Haskell

  • 问题内容: 我来自C语言,正在学习Python。缺乏显式的类型安全性令人不安,但是我已经习惯了。面对动态语言的所有优点,缺少内置的基于契约的编程(纯抽象类,接口)的不足是必须习惯的。 但是,无法请求const- cortectness使我疯狂!为什么Python中没有常量?为什么不鼓励使用类级常量? 问题答案: C和Python属于两种不同的语言类别。 前一个是 静态 类型的。后者是 动态的 。