Day16.几个常用的排序库

【学习心得笔记】Python100天-第二部分Day16-Day20 本文是个人对于项目的学习的一些心得和笔记,简单记录,如有不妥之处,欢迎批评指正。 阅读详情

几个常用的排序库



前言

在Python中其实有蛮多好用的排序库,但是自己却很少见的,当然了,由于自己能力有限,先简单介绍一点简单的库嘛。生成式是我们在写代码时,为了美观以及代码的高效性,经常使用的一个Python进阶的知识,而这其中经常会出现一些(有毒的)坑,毕竟像我这种刚从基础过来的小白,刚看到这种东西,一下子还是思路跟不上的。


一. 生成式(推导式)

1.1 简单用法

prices = {
  'AAPL': 191.88,
  'GOOG': 1186.96,
  'IBM': 149.24,
  'ORCL': 48.44,
  'ACN': 166.89,
  'FB': 208.09,
  'SYMC': 21.29
}
# 用股票价格大于100元的股票构造一个新的字典
prices2 = {key: value for key, value in prices.items() if value > 100}
print(prices2)

注: 生成式(推导式)可以用来生成列表、集合和字典。

1.2 嵌套列表的套路(坑)

names = ['关羽', '张飞', '赵云', '马超', '黄忠']
courses = ['语文', '数学', '英语']
# 录入五个学生三门课程的成绩
# 错误 - 参考http://pythontutor.com/visualize.html#mode=edit
# scores = [[None] * len(courses)] * len(names)
scores = [[None] * len(courses) for _ in range(len(names))]
for row, name in enumerate(names):
    for col, course in enumerate(courses):
        scores[row][col] = float(input(f'请输入{name}的{course}成绩: '))
        print(scores)

二. 相关模块使用

2.1 heapq模块-堆排序

"""
从列表中找出最大的或最小的N个元素
堆结构(大根堆/小根堆)
"""
import heapq

list1 = [34, 25, 12, 99, 87, 63, 58, 78, 88, 92]
list2 = [
  {'name': 'IBM', 'shares': 100, 'price': 91.1},
  {'name': 'AAPL', 'shares': 50, 'price': 543.22},
  {'name': 'FB', 'shares': 200, 'price': 21.09},
  {'name': 'HPQ', 'shares': 35, 'price': 31.75},
  {'name': 'YHOO', 'shares': 45, 'price': 16.35},
  {'name': 'ACME', 'shares': 75, 'price': 115.65}
]
print(heapq.nlargest(3, list1))  # 最大的三个
print(heapq.nsmallest(3, list1))  # 最小的三个
# 以 price 为关键字,选取最大的两个
print(heapq.nlargest(2, list2, key=lambda x: x['price']))  
# 以 shares 为关键字,选取最大的两个
print(heapq.nlargest(2, list2, key=lambda x: x['shares']))

2.2 itertools模块-迭代

"""
迭代工具模块
"""
import itertools

# 产生ABCD的全排列
print(itertools.permutations('ABCD'))
# 产生ABCDE的五选三组合
print(itertools.combinations('ABCDE', 3))
# 产生ABCD和123的笛卡尔积
print(itertools.product('ABCD', '123'))
# 产生ABC的无限循环序列
print(itertools.cycle(('A', 'B', 'C')))

2.3 collections模块

其他的工具类:

  1. namedtuple:命令元组,它是一个类工厂,接受类型的名称和属性列表来创建一个类。
  2. deque:双端队列,是列表的替代实现。Python中的列表底层是基于数组来实现的,而deque底层是双向链表,因此当你需要在头尾添加和删除元素是,deque会表现出更好的性能,渐近时间复杂度为 O ( 1 ) O(1) O(1)。
  3. Counter:dict的子类,键是元素,值是元素的计数,它的most_common()方法可以帮助我们获取出现频率最高的元素。Counter和dict的继承关系我认为是值得商榷的,按照CARP原则,Counter跟dict的关系应该设计为关联关系更为合理。
  4. OrderedDict:dict的子类,它记录了键值对插入的顺序,看起来既有字典的行为,也有链表的行为。
  5. defaultdict:类似于字典类型,但是可以通过默认的工厂函数来获得键对应的默认值,相比字典中的setdefault()方法,这种做法更加高效。
"""
找出序列中出现次数最多的元素
"""
from collections import Counter

words = [
  'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes',
  'the', 'eyes', 'the', 'eyes', 'the', 'eyes', 'not', 'around',
  'the', 'eyes', "don't", 'look', 'around', 'the', 'eyes',
  'look', 'into', 'my', 'eyes', "you're", 'under'
]
counter = Counter(words)
print(counter.most_common(3))

总结

今天主要学了两个方面,一个是关于生成式的简单用法以及出现一些复杂的生成式时会出现的坑。然后就是开始接触简单的算法了,这里有几个常见的关于排序的库(毕竟小白开始接触关于算法的最好的内容就是排序了)。上面的内容只能说是自己勉强看懂吧,继续加油,像大佬们看齐。

溜了遛了,脑壳疼。(16/100)。。。

TMC2209的UART模式详解:如何用串口调试助手配置细分和电流(避坑指南) 本文深入解析TMC2209步进电机驱动器的UART模式,详细讲解如何通过串口调试助手配置细分和电流,包括硬件连接、通信协议、关键寄存器设置及高级功能应用。提供实战避坑指南,帮助开发者优化步进电机控制性能,适用于精密仪器、3D打印等场景。 阅读详情

相关推荐

西门子S7-1500 PLC模块化编程与生产线自动化实践

PLC(可编程逻辑控制器)作为工业自动化核心设备,其模块化编程技术能显著提升产线控制系统的开发效率。通过SCL高级语言实现算法封装、功能块(FB)复用等工程实践,可构建稳定可靠的分层式控制架构。本文以西门子TIA Portal平台为例,详解S7-1500系列PLC在汽车零部件产线中的标准化应用方案,包含配方管理、设备联动等典型场景的SCL实现,以及Profinet通信、虚拟轴同步等进阶技巧。特别适用于需要快速实施中大型生产线自动化改造的工程师,提供经过验证的异常处理机制和模块化设计规范。

weixin_34341229的博客 457

C++常用算法库(一)——排序算法Sort

sort()函数的真正强大之处在于其灵活性。在这个例子中,我们定义了一个简单的函数descending来使sort()按照降序排列元素。});C++的sort()函数是一个功能强大而且灵活的工具,适用于多种排序任务。通过深入理解其工作原理和学会自定义排序规则,你可以充分利用它来提高程序的性能和效率。记住,在选择排序策略时,考虑数据的特性和应用场景是非常重要的。

tang7mj的博客 896

# 多用户 JupyterHub 配置教程(通用 Linux 服务器版)

以上即是通用 Linux 服务器上的多用户 JupyterHub 实战配置。从安装认证与 Spawner 选择自动创建系统用户到反代与运维,覆盖了小团队到中等规模的主流场景。根据团队增长与合规要求,你可以进一步引入、统一身份源(LDAP/OAuth2/Keycloak)与资源配额治理,平滑演进到企业级部署。

数字化老司机 1288

推荐开源项目:sorts - 极速排序库为你的大数据集加速!

推荐开源项目:sorts - 极速排序库为你的大数据集加速! 在追求效率的编程世界里,每毫秒都至关重要。当你的应用面临处理海量数据排序的挑战时,stdlib sort虽然强大且标准,但是否已经到达其性能极限?今天,我们为你介绍一款开源宝藏——sorts,一个专为并行排序而生的Go语言库,它能成为解决你大容量数据排序瓶颈的得力助手。 项目介绍 sorts,位于 GitHub 的 twotwotwo/...

gitblog_00620的博客 352

JaCoCo报告聚合的5个常见坑点排查指南:从单模块到多模块的完整避坑手册

本文详细解析了JaCoCo在多模块Maven项目中生成聚合报告时的5个常见问题,包括多模块报告聚合失效、覆盖率数据不一致、增量构建导致的覆盖率丢失等,并提供了具体的配置示例和解决方案。帮助开发者高效排查和解决JaCoCo报告聚合中的各种疑难杂症,提升代码覆盖率分析的准确性和效率。

weixin_27918373的博客 250

使用buildroot系统的qmake编译QT出现Unknown module(s) in QT: xxxx 的错误解决方法

可以看到,我这里使用的是 qt5base-5.15.2 目录下的qmake,这个qmake只包含了基础的qt模块,而额外添加的qt模块没有包含进去,需要使用。可以看到我这里是有的,如果你跟我一样,模块存在,但是还是报找不到对应模块的错误的话,大概率是跟我一样,用错qmake了,看第二点。在包含 qt5base 目录下查看,是否有对应模块的目录,如果没有的话,需要通过make menuconfig 添加一下。目录下的qmake才可以。

T541132的博客 2490

排序专题-排序库函数使用

默认的升序排列 #include<iostream> #include<algorithm> using namespace std; int main(){ int n; int buf[100]; while(cin>>n){ if(n==0) break; for(int i=0;i<n;i++){ cin>>bu...

Jeniclala的博客 395

【K8S系列】Kubernetes 中 Pod 无法通过 Service 名称访问服务的 DNS 解析失败问题【已解决】

在 Kubernetes 中,Service 提供了一种稳定的方式,通过名称访问一组 Pod。当其他 Pod 无法通过 Service 名称访问服务,并且出现 DNS 解析失败时,通常会导致应用无法正常工作。本文将详细分析此问题的常见原因及其解决方案。

颜淡慕潇 1万+

C qsort 排序

http://blog.sina.com.cn/s/blog_51cea4040100r4hr.html  C语言标准库函数qsort排序的介绍与使用 qsort函数声明如下: void qsort(void *base, size_t nmemb, size

dy_Learning的专栏 980

一文入门车载以太网:从原理到实战,看完就能上手开发

新手选型遵循“适配场景、兼顾成本、优先车规”的原则:普通场景(车载娱乐、普通诊断):100Base-T1 PHY(LAN8742)+ 非TSN交换机(SJA1105)+ STM32H743 ECU + 普通STP线缆;ADAS场景:1000Base-T1 PHY(TJA1101)+ TSN交换机(SJA1110)+ NXP S32G399 ECU + 高抗干扰STP线缆;避免过度选型:如普通娱乐场景无需选择TSN交换机、ASIL-B级芯片,否则会增加成本;

getusushu的博客 318

深入C++学习还必须掌握的一基础知识精讲

施磊C++语言基础提高课程笔记,包括了new/delete;malloc/free;引用和指针;const,指计和引用的结合;函数重载,inline的数,参数带默认值的函数;函数模板等知识点

GeniusAng的博客 1477

c++排序-库函数sort()

对数组进行排序是很经常遇到的问题,如果我们自己编程进行排序则不免会有效率低下,浪费时间等问题,而c++库函数中则包含这个函数可以帮助我们快速的进行排序,因此我们没有必要重复造轮子。sort包含在algorithm中,所以如果要使用需#include&lt;slgorithm&gt;,它使用的排序方法是类似于快排的方法,时间复杂度未n*log2(n),执行效率很高。sort函数有三个参数:第一个:待...

lyp_1020k的博客 5869

【产品】 产品设计:ID设计和MD设计详解

1、ID(Industry Design)工业设计 包含外观、材质、手感、颜色配搭,主要界面的实现与及色彩等方面的设计。 2、MD(Mechanical Design)结构设计 以手机为例: 前壳、后壳、手机的摄像镜头位置的选择、固定的方式、电池如何连接和手机的厚薄程度等。 如果是滑盖手机,如何让手机滑上去,怎样实现自动往上弹,SIM卡怎样插和拔的安排,这些都是手机结构设计的范畴。 繁...

产品线负责人 3万+

阿翰 剑指offer 之 Day 16 排序 简单

排序1. 把数组排成最小的数 2. 扑克牌中的顺子

b_e_w的博客 1014

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Leetcode 剑指系列 Day 16 排序

Leetcode 剑指系列 Day 16 排序 1.剑指 Offer 45. 把数组排成最小的数 解题思路: 重新将数组排序,最后逐个输入string 排序规则: 防止各数相加过大,利用字符串相加进行比较 若"num1" + “num2” > “num2” + “num1”,将num2排在前面,否则反之 排序用快排 可得到如下代码 class Solution { public: void quickSort(vector<int>& nums, int head, i

qq_44732816的博客 1106

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Leetcode刷题100天—面试题 16.16. 部分排序(排序)—day58

前言: 作者:神的孩子在歌唱 大家好,我叫智 面试题 16.16. 部分排序 难度中等78 给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。 示例: 输入: [1,2,4,7,10,11,7,12,6,7,16,18,19] 输出: [3,9] 提示: 0 <= len(array) &l

智的博客 2300

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

day16排序,限流

16.1 排序 16.1.1 Ordering-Filter的使用 概念:将获取到的字段进行排序 导包: from rest_framework.filters import OrderingFilter 代码: 全局过滤:在settings文件下 REST_FRAMEWORK = { # 过滤全区 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBac...

weixin_60677608的博客 109

【C#入门】Day16-Day20 完整知识点归纳总结

本文是C#入门系列第三部分,涵盖数据库与WinForm开发的核心内容。SQL基础篇(Day16-17)介绍数据库概念、SQL Server安装使用、数据类型与六大约束(非空、检查、主键等),将数据库比作餐厅仓库,数据文件类比为不同功能的库房。查询进阶篇(Day18-19)讲解模糊查询、聚合函数、多表联查和事务处理。WinForm篇(Day20)详解窗体开发、控件绑定等GUI编程要点。全文采用生活化类比(如主键约束比作排队取号系统),配套代码示例帮助理解数据库与界面开发的抽象概念。

2301_80444089的博客 329

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day7

本文包含5道选择题和2道编程题解析。选择题涵盖函数参数传递、递归调用、指针操作等核心概念,如形参与实参存储关系、递归函数执行过程等。编程题包括字符排序(使用qsort实现)和寻找数组中心下标(通过数学公式优化遍历)。文中强调对细节的理解(如递归边界、内存管理)和算法优化(O(n)时间找中心下标),旨在巩固C语言基础与数据结构应用。完整代码示例及解析可帮助读者实践与反思。 关键词: C语言复习、递归、指针、qsort、中心下标、时间复杂度

会当凌绝顶,一览众山小 1738

复试21天day 16

计算机复试题,包括数据结构,操作系统,计算机网络,计算机组成原理,数据库,软件工程,专业面试,英语面试等等,一共21天坚持更新,如果对你有帮助,欢迎点赞评论关注博主

薛定谔的猫的博客 1347

day16_集合_Set

day16_集合_Set

m0_58073753的博客 2032

PythonStock(13):使用stockstats计算股票中的16个常用指标方法大全

前言使用Python开发一个股票项目。 项目地址: https://github.com/pythonstock/stock 相关资料: http://blog.csdn.net/freewebsys/article/details/78294566 主要使用开发语言是python。 使用的lib库是pandas,tushare,TensorFlow,tornado等。本文的

freewebsys的专栏 5万+

算法Day16 分治排序

归并排序简单实现

m0_60695518的博客 535

Java阶段一Day16

今天是学习Java阶段一的第十六天,今天主要是对昨日Collection接口的List接口和Set接口进行讲解学习,包含常见的实现类、常用方法,集合的排序等,又讲了讲Lambda表达式

今天你学Java了吗 542

【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day8

本文分享了C语言复习训练的题目解析,包含5道选择题和2道编程题。选择题重点考察数组定义、字符串处理和多维数组访问等知识点,其中第1题解析字符串结束符'\0'的特性,第4题讨论合法数组定义方式。编程题部分,第一题采用查表法统计不同字符数量,通过ASCII值作为数组下标实现;第二题通过排序后取中值的方法高效找出出现次数超过半数的元素。强调C语言学习需要注重细节理解和持续实践,为读者提供了实用的编程思路和解题技巧。

会当凌绝顶,一览众山小 1319

Day16-排序,限流

这里写目录标题1 排序1.1 Ordering-Filter的使用2 限流2.1 匿名用户全局限流2.2 匿名用户局部限流 1 排序 1.1 Ordering-Filter的使用 from rest_framework.filters import OrderingFilter class StuView(ModelViewSet): queryset = Student.objects.all() serializer_class = StuSerializer #3

m0_67425175的博客 117
上一篇: 办公自动化的一些简单操作
下一篇: Day17.数据结构和算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值