鱼C论坛

 找回密码
 立即注册
查看: 1980|回复: 2

[已解决]第三十九讲作业中的关于编程栈的一个小问题

[复制链接]
发表于 2017-6-27 16:54:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第三十九讲关于栈编程的参考答案一开始是这么写的:
class Stack:
    def __init__(self, start=[]):
        self.stack = []
        for x in start:
            self.push(x)

然后我就有个小问题,写成下面的样子也是可以的吧?
class Stack:
    def __init__(self, start=[]):
        self.stack = start

请问这两种写法里面有什么区别吗???第一种写法是不是有说法在里面??
谢谢

最佳答案
2017-6-27 18:18:09
不一样啊,如果你选择用self.stack = start,那么start改变的时候,self.stack也会跟着改变。

而且我记得根据PEP的要求,默认参数也不应该指定可变类型的参数,就是说start=[]也不是推荐的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-27 18:18:09 | 显示全部楼层    本楼为最佳答案   
不一样啊,如果你选择用self.stack = start,那么start改变的时候,self.stack也会跟着改变。

而且我记得根据PEP的要求,默认参数也不应该指定可变类型的参数,就是说start=[]也不是推荐的代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-27 19:19:47 | 显示全部楼层
我还没钱做这个作业呢~
擦干眼泪回答问题
两段代码,前者是栈操作,后者是列表的赋值操作
这里要解释下基础知识:
栈是一种特殊的数据结构,好比一个竖井,先进入栈的数据会被后进入栈的数据压下去(往栈里添加数据叫“压栈”也就是PUSH),在取出数据时,也要按照先后次序,从顶端取(所以这个方法叫POP)
与栈对应的是堆,堆是先进先出的队列结构,好比一个管子,你只要等在另一头,就能按照放入的次序获得数据
而列表,则是可以按索引取出的高级数据结构,同样因为能够索引,列表的效率远远不如堆栈
然后来说问题
前者存储的数据能用push压也能用pop取,并且一定是反序的
后者就未必了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-5 02:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表