如何不使用.pop方法实现Stack类的stack_pop方法?
不使用
pop()方法实现栈的出栈功能 你的代码核心逻辑没问题,只需要替换掉pop()方法的使用即可。这里提供两种简单可行的实现方案:
方案一:用del语句删除栈顶元素
class Stack: def __init__(self): self.a_list = [] def stack_push(self, num): self.a_list.append(num) def stack_pop(self): # 先判断栈是否为空,空栈返回None if not self.a_list: return None # 获取栈顶元素(列表最后一个元素) top_item = self.a_list[-1] # 删除列表最后一个元素(栈顶) del self.a_list[-1] return top_item
方案二:通过切片重新赋值列表
class Stack: def __init__(self): self.a_list = [] def stack_push(self, num): self.a_list.append(num) def stack_pop(self): if not self.a_list: return None top_item = self.a_list[-1] # 用切片生成去掉最后一个元素的新列表,重新赋值 self.a_list = self.a_list[:-1] return top_item
关键逻辑说明
- 空栈判断:必须先检查列表是否为空,避免直接取索引
[-1]时触发越界错误。 - 获取栈顶元素:栈遵循后进先出规则,栈顶对应列表的最后一个元素,用
self.a_list[-1]可以直接定位。 - 移除栈顶元素:
del self.a_list[-1]是Python原生的删除指定索引元素的方法,直接修改原列表。- 切片
self.a_list[:-1]会生成一个不含最后一个元素的新列表,重新赋值后等价于移除了栈顶元素。
用你的示例测试代码运行,两种方案都能依次输出3、2、1,完全符合要求。
内容的提问来源于stack exchange,提问作者H20zzz
相关产品推荐
相关产品推荐

