Python:heapq模块使用

简介:heapq模块提供了堆队列算法的实现,也称为优先队列算法。

常用方法
1、实现堆排序。
2、获取迭代器iter中n个最大的元素或者最小元素。

基础案例

import heapq


def heap_sort(iterable):
    h = []
    for value in iterable:
        heapq.heappush(h, value)
    return [heapq.heappop(h) for i in range(len(h))]


if __name__ == '__main__':
    # 实现堆排序
    print(heap_sort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0]))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    my_list = [2, 3, 7, 8, 1, 9, 7, 8, 5, 6]

    # 获取前 n 个最大值的列表
    n_large = heapq.nlargest(3, my_list)
    print("n_large", n_large)  # [9, 8, 8]

    # 获取前 n 个最小值
    n_small = heapq.nsmallest(3, my_list)
    print("n_small", n_small)  # [1, 2, 3]

进阶案例:

# 数组中的第 k大的数字
# 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
# 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
# 示例 1:
# 输入: [3,2,1,5,6,4] 和 k = 2
# 输出: 5
#
# 示例 2:
# 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
# 输出: 4


class Solution:
    def findKthLargest(self, nums: list[int], k: int) -> int:
        import heapq
        result = heapq.nlargest(k, nums)[-1]
        return result


if __name__ == '__main__':
    s = Solution()
    nums = [3, 2, 3, 1, 2, 4, 5, 5, 6]
    r = s.findKthLargest(nums, 4)
    print(r)  # 4

微信公众号:玩转测试开发
欢迎关注,共同进步,谢谢!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值