当前位置: 首页 > news >正文

扬州互联网公司/郑州官网网站推广优化公司

扬州互联网公司,郑州官网网站推广优化公司,在阿里巴巴网站上怎么做贸易,可以做logo设计单子的网站欢迎大家扫码关注我的微信公众号: 找到最大或最小的 N 个元素一、问题二、解决方案三、讨论一、问题 我们想在某个集合中找出最大或最小的 N 个元素。 二、解决方案 heapq 模块中有两个函数 —— nlargest() 和 nsmallest() —— 它们正是我们所需要的&#xff…

欢迎大家扫码关注我的微信公众号:
数据之恋

找到最大或最小的 N 个元素

  • 一、问题
  • 二、解决方案
  • 三、讨论

一、问题

我们想在某个集合中找出最大或最小的 N 个元素。

二、解决方案

heapq 模块中有两个函数 —— nlargest() 和 nsmallest() —— 它们正是我们所需要的:

>>> import heapq
>>> lst = [1, 22, -23, -232, 789, 230, 2907]
>>> heapq.nlargest(2, lst)
[2907, 789]
>>> heapq.nsmallest(2, lst)
[-232, -23]

这两个函数都可以接受一个参数 key, 从而允许它们工作在更加复杂的数据结构之上:

>>> import heapq
>>> lst = [{'name': 'CookBook', 'price': 108, 'balance': 11}, {'name': 'Mysql', 'price': 78, 'balance': 232}, {'name': 'JavaScript', 'price': 22, 'balance': 565}]
>>> cheapest = heapq.nsmallest(2, lst, key=lambda x: x['price'])
>>> cheapest
[{'name': 'JavaScript', 'price': 22, 'balance': 565}, {'name': 'Mysql', 'price': 78, 'balance': 232}]
>>> expensivest = heapq.nlargest(2, lst, key=lambda x: x['price'])
>>> expensivest
[{'name': 'CookBook', 'price': 108, 'balance': 11}, {'name': 'Mysql', 'price': 78, 'balance': 232}]

三、讨论

如果正在寻找最大或最小的 N 个元素, 且同集合中元素的总数目相比, N 很小, 那么下面这些函数可以提供更好的性能。 这些函数首先会在底层将数据转化成列表, 且元素会以堆的顺序排列:

>>> lst = [1, 22, -23, -232, 789, 230, 2907]
>>> import heapq
>>> tmp = list(lst)
>>> heapq.heapify(tmp)
>>> tmp
[-232, 1, -23, 22, 789, 230, 2907]

堆最重要的特性就是 heap[0] 总是最小的那个元素。 此外, 接下来的元素可依次通过 heapq.heappop() 方法轻松找到。 该方法会将第一个元素(最小的)弹出, 然后第二小的元素取而代之(这个操作的复杂度是 O(log N), N 代表堆的大小)。

>>> heapq.heappop(tmp)  # 想找最小的元素
-232
>>> heapq.heappop(tmp)  # 想找第二小的元素
-23
>>> heapq.heappop(tmp)  # 想找第三小的元素
1

【注意】当我们想要找的最大或最小的 N 个元素比这个集合中所有元素的个数要小很多的时候, 我们利用上述的方法, 会得到更好的性能。

【注意】

  1. 当所要找的元素数量相对较小时, 函数 nlargest() 和 nsmallest() 才是最适用的。
  2. 如果只是简单的想找到最大或最小的那一个元素时, 用 min() 和 max() 会更快。
  3. 同样如果 N 和集合本身的大小差不多时, 通常更快的方法是先对集合排序, 然后做切片操作。

应该注意的是, nlargest() 和 nsmallest() 的实际实现会根据使用它们的方式不同而不同, 可能会相应作出一些优化措施。

http://www.jmfq.cn/news/4773223.html

相关文章:

  • 做网站servlet/深圳关键词优化怎么样
  • 课程网站建设的财务分析/网站免费网站免费
  • 建设有限公司/嘉兴seo网络推广
  • 网站建设是广告吗/seo排名的公司
  • 烟台做网站优化哪家好/龙斗seo博客
  • 企业门户网站建设/线上营销推广方法
  • 做平面设计的一般浏览什么网站/全网营销课程
  • 泰安网站建设 九微米/代发关键词排名包收录
  • 网站建设痛点/网络营销文案策划都有哪些
  • 和网站签约新闻/百度seo关键词怎么做
  • 域名空间有了怎么做网站/一手app推广接单平台
  • 不花钱的免费永久云服务器平台/上海网站推广优化
  • 网站建设技术服务费记什么科目/一站传媒seo优化
  • 福建龙岩新罗区疫情最新消息/长沙seo关键词排名优化
  • 做网站的主流软件/seo推广费用需要多少
  • 国外做ppt网站/百度电脑端网页版入口
  • 宁波俄语网站建设/自动app优化官网
  • 外企网站建设服务公司/东莞网站快速排名提升
  • 建设银行官网首页/搜索引擎优化关键词的处理
  • 网络工作室网站建设/百度推广关键词价格查询
  • 网站重构工程师/百度推广账户怎么开
  • 网页设计模板素材图片旅游/太原seo代理商
  • 石家庄做外贸的网站建设/百度怎么推广自己的作品
  • 做美食下载什么网站/网站模板平台
  • 网页设计师个人简历参考范文/莱阳seo排名
  • 如何建一个个人网站/查网站域名
  • 网站上传可以通过/企业如何进行网站推广
  • 建设部网站官网挂证通报/千锋教育的官网
  • 住房与城乡建设部网站EPC/网站收录网
  • 响应式网站模板是什么/百度搜索关键词排名优化技术