sort、sorted高级排序-Python3.7 And 算法<七>
1、sort(*, key=None, reverse=False)- sort()接受两个参数,这两个参数只能通过关键字(关键字参数)传递。
- 参数key:带一个参数的函数(排序时,会依次传入列表的每一项,作为该函数的参数)。该函数用于在比较排序之前进行的操作,e.g:每个字符串比较之前,需要统一小写。默认值None,说明每次比较排序之前不对比较项进行任何操作。
>>> test=["A","a","E","W","o"]
>>> test.sort()
>>> test
['A', 'E', 'W', 'a', 'o']
>>>
>>> test.sort(key=lambda x:x.lower())
>>> test
['A', 'a', 'E', 'o', 'W']
>>>
key还可以是比较函数functools.cmp_to_key(func),该函数主要用 Python 3 之前Python版本,因为 Python 3 中不支持比较函数。
>>> from functools import cmp_to_key
>>> test=[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
>>> myKey=cmp_to_key(lambda x,y:y[0]-x[0] if x[0]!=y[0] else x[1]-y[1]) #x 代表后面的数 y代表前面的数
>>> test.sort(key=myKey)
>>> test
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
- 参数reverse:在比较排序之后,是否要进行反向排序。传入True或False或能转换为True或False的值
>>> test=[2,3,4,5,6,3,4,1]
>>> test.sort()
>>> test=[2,3,4,5,6,3,4,1]
>>> test.sort(reverse=True)
>>> test
[6, 5, 4, 4, 3, 3, 2, 1]
>>> >>> test=[2,3,4,5,6,3,4,1]
>>> test.sort(reverse=0)
>>> test
[1, 2, 3, 3, 4, 4, 5, 6]
>>>
2、sorted(iterable, *, key=None, reverse=False)
不改变原排序,在原排序的副本上修改,返回新排序。其他与sort一样。
>>> test1=[[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
>>> sorted(test1,key=myKey)
[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]] #返回新的排序
>>> test1
[[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]] #test1没变
插入一道算法题:
LeetCode.406. 根据身高重建队列<七>
假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。
注意:
总人数少于1100人。
示例 输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
思路:先按大到小排,先把大的排好队,小的在往大的队列插入,这样前面排好的队列就不会受到影响。
class Solution:
def reconstructQueue(self, people):
"""
:type people: List[List[int]]
:rtype: List[List[int]]
"""
from functools import cmp_to_key
key1 = cmp_to_key(lambda x, y: y[0] - x[0] if x[0] != y[0] else x[1] -y[1])
people.sort(key=key1) # 排完序后[[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
sort_people=[]
for p in people:
sort_people.insert(p[1],p)
return sort_people
sort、sorted高级排序-Python3.7 And 算法<七>的更多相关文章
- 【Python】 sort、sorted高级排序技巧
文章转载自:脚本之家 这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Pyth ...
- 【转载】 python sort、sorted高级排序技巧
这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Python list内置so ...
- python sort、sorted高级排序技巧(转)
add by zhj: 没找到原文.可以按多个维度进行排序,而且可以指定他们的排序方向,如果维度都是数字,排序比较容易,用+/-号就可以 指定排序方向.否则,就调用多次sorted进行排序了,而且要按 ...
- python sort、sorted高级排序技巧
文章转载自:脚本之家 Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的 ...
- python--sort()和sorted()高级排序
1.list中的sort()方法: def sort(self, key=None, reverse=False): # real signature unknown; restored from _ ...
- 【高级排序算法】2、归并排序法的实现-Merge Sort
简单记录 - bobo老师的玩转算法系列–玩转算法 -高级排序算法 Merge Sort 归并排序 Java实现归并排序 SortTestHelper 排序测试辅助类 package algo; im ...
- 【高级排序算法】1、归并排序法 - Merge Sort
归并排序法 - Merge Sort 文章目录 归并排序法 - Merge Sort nlogn 比 n^2 快多少? 归并排序设计思想 时间.空间复杂度 归并排序图解 归并排序描述 归并排序小结 参 ...
- Java数据结构和算法 - 高级排序
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...
- javascript数据结构与算法--高级排序算法
javascript数据结构与算法--高级排序算法 高级排序算法是处理大型数据集的最高效排序算法,它是处理的数据集可以达到上百万个元素,而不仅仅是几百个或者几千个.现在我们来学习下2种高级排序算法-- ...
随机推荐
- 21.ArrayList
ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部用来 ...
- Servlet 中,out.print()与out.write()的区别
最近刚学习了Ajax,其中有通过$.getJSON的实现方式 由于前后端传递值的时候会通过流的方式进行传递,这就不得不涉及到这方面的知识了 PrintWrite out=response.getWri ...
- (转)web前端知识精简
Web前端技术由 html.css 和 javascript 三大部分构成,是一个庞大而复杂的技术体系,其复杂程度不低于任何一门后端语言.而我们在学习它的时候往往是先从某一个点切入,然后不断地接触和学 ...
- 记录使用 Cake 进行构建并制作 nuget 包
书接上一回(https://www.cnblogs.com/h82258652/p/4898983.html)?[手动狗头] 前段时间折腾了一下,总算是把我自己的图片缓存控件(https://gith ...
- HSmartWindowControl 之 显示图像
概述:使用Halcon在VS中的控件显示一张图片. 要点:使用了图像缩放和图像显示函数,以及鼠标滚轮响应函数. 1.创建WinForm项目 首先在VS中添加Halcon所需的控件HSmartWindo ...
- 关于javac和java
1.为什么安装完jdk后不配置环境变量就能直接运行java,而不能运行javac 在安装jdk的时候jdk会自带一个jre(java运行环境),还会单独安装一个jre,默认路径是和jdk在同级目录,而 ...
- 简单标签SimpleTag
想要开发自定义标签,大多数情况下都要重写doStartTag(),doAfterBody()和doEndTag()方法,并且还要知道SKIP_BODY,EVAL_BODY等等的变量代表着什么,在什么方 ...
- Cannot determine embedded database driver class for database type NONE
springboot+jpa使用自定义配置文件连接数据库报错:Cannot determine embedded database driver class for database type NON ...
- odoo开发笔记 -- 传递上下文实现列表视图按照指定条件过滤显示
按钮传递上下文: <xpath expr="//div[@name='dec_work_sheet_id']" position="after"> ...
- JConsole观察分析Java程序的运行状态
Java 自带性能监控工具:监视和管理控制台 jconsole,它可以提供 Java 某个进程的内存.线程.类加载.jvm 概要以及 MBean 等的实时信息. 通过Java SE Developme ...