包含min函数的栈-python

本文介绍了一种实现带有获取最小元素操作的栈的方法。通过使用辅助栈存储当前最小值,可在常数时间内完成最小值查询。当新元素小于等于当前最小值时,将其压入辅助栈;否则,压入当前最小值。出栈时同步更新辅助栈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#思路:新建一个辅助栈来存储当前最小值,当有更小值入栈时,将其压入此栈,最小值为栈顶元素。当栈顶的元素出栈后,此时栈顶的元素就顺应成为新的最小值
class min_stack:
    def __init__(self):
        self.stack = []
        self.minstack = []

    def push(self, data):
        # 将新元素添加到栈
        self.stack.append(data)
        # 当新元素比之前的元素小时,将新元素压入到辅助栈,否则将之前元素重复压入辅助栈
        if data < self.minstack[-1] or len(self.minstack) == 0:
            self.minstack.append(data)
        else:
        	self.minstack.append(self.minstack[-1])

    def pop(self):
        self.minstack.pop()
        return self.stack.pop()
    
    def min(self):
        return self.minstack[-1]
### Python 中 `min` 函数的返回值与用法详解 #### 什么是 `min` 函数? `min` 是 Python 内置的一个函数,用于找到一组可比较对象中的最小值。它可以接受多种形式的参数输入,并根据这些参数返回相应的最小值。 --- #### 返回值 `min` 函数的主要目的是返回其参数列表中具有最低序号(即按自然顺序排列的第一个)的对象。如果没有提供有效的参数或传入空序列而未指定默认值,则会抛出 `ValueError` 异常[^1]。 --- #### 参数说明 - **单个可迭代对象**:可以直接传递一个集合、列表或其他可迭代类型作为单一参数。 - **多个独立参数**:也可以单独列出若干个待比较项。 - **关键字参数 `key` 和 `default`**: - `key`: 自定义排序逻辑,通过指定一个函数来决定元素如何被评估。 - `default`: 当提供的可迭代为空时使用的回退选项,防止引发错误[^2]。 --- #### 使用示例 ##### 示例 1:基本用法——寻找数字列表中的最小值 ```python numbers = [34, 78, 12, 56, 9] minimum_value = min(numbers) print(minimum_value) # 输出: 9 ``` 此处展示了如何从整数列表中找出最小的那个数值[^3]。 ##### 示例 2:字符串对比 ```python words = ["banana", "apple", "cherry"] smallest_word = min(words) print(smallest_word) # 输出:"apple" ``` 由于字母表顺序的关系,“apple”成为字典序上的首位词[^3]。 ##### 示例 3:带 key 参数的应用 假设我们有一组元组表示学生姓名与其成绩配对情况,想依据分数选出得分最少的学生名字。 ```python students_scores = [("Alice", 88), ("Bob", 76), ("Charlie", 90)] lowest_scorer = min(students_scores, key=lambda student: student[1])[0] print(lowest_scorer) # 输出:"Bob" ``` 这里利用 lambda 表达式指定了基于第二位成员进行判定的标准[^2]。 ##### 示例 4:处理潜在异常状况 当面临不确定长度甚至可能是零长容器的情形下,默认设定显得尤为重要。 ```python empty_list = [] safe_min = min(empty_list, default="No items available") print(safe_min) # 输出:“No items available” ``` 这样即便源数据缺失也不会崩溃程序流程[^2]。 --- ### 注意事项 虽然 `min` 功能强大且简单易用,但仍需注意以下几点: - 输入必须具备可比性质,否则会产生 TypeError 错误; - 对于复杂结构的数据集来说,合理配置 key 参数尤为关键; - 结合实际情况灵活运用 default 防护措施提升健壮度[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值