内置排序方法-sorted和sort

news/2024/5/19 23:36:49 标签: 列表, lambda, python, java, 快速排序

sorted(iterable, key=None, reverse=False) 和 reversed(iterable)函 数

可以处理任何可迭代对象,返回一个排序或反转的迭代器。

方法 list.sort(key=None, reverse=False) 和 list.reverse()只是列表的内置方法,对原列表操作无返回值。

s = [3, 6, 2, 7, 1, 9]
print(sorted(s)) # [1, 2, 3, 6, 7, 9]
print(s.sort()) # None
print(s) # [1, 2, 3, 6, 7, 9]
# TypeError: 'NoneType' object is not iterable,没返回值,报错
for n in word.reverse():
print(w)
# 9 1 7 2 6 3
for n in reversed(word):
print(n)

补充个 sorted 的用法,可以了解下sorded 的复杂用法:

# ['a', 'b', 'b', 'c'] 输出频率最高的前k个字符。O(NlogN)
def topKFrequent(self, words, k):
    dic = {}
    for word in words:
        dic[word] = dic.get(word, 0) + 1
    # 若 -dic[word] 相同,按word排序,题目要求同频率下按字母顺序排序
    ret = sorted(dic, key=lambda word: (-dic[word], word))
    return ret[:k]

sorted 返回重新排序的列表

  • 第一个参数是 iterable,表示可迭代的对象,也是被排序的目标,直接传入字典的话相当于是 dict.keys(),想输出 value 的话要用 dict.values(),想输出全部的话要用 dict.items()。

  • 第二个参数是 key,key 是只接收一个参数的函数,一般用匿名函数 lambdalambda 的语法是唯一的:

                其形式为 lambda argument_list: expression

    • 这里的 argument_list 是参数列表,这里的 expression 是一个关于参数的表达式,表达式中出现的参数需要在 argument_list 中有定义,并且表达式只能是单行的,所以 lamdba 的输入是传入到参数列表 argument_list 的值,输出是根据表达式 expression 计算得到的值。

    • 这里的 word 表示匿名函数的输入,其实就是前面 iterable 的每一个迭代对象,即字典中的每个 key(不指定 items()或 values()时默认指的是 key),(-dic[word], word)) 表示匿名函数的输出,即输出了一个元组,对这个元组进行排序,用元组是因为题目要求,如果出现频率相同的,要按照字母先后进行排序,所以-dic[word] 相同的情况下,根据 word 排序。

  • 第三个参数是 reverse,用来指定排序是倒序还是顺序,reverse=true 则是倒序,reverse=false 时则是顺序,默认 reverse=false。


http://www.niftyadmin.cn/n/1081776.html

相关文章

【郭林专刊】提高 Java 代码质量

使用软件测试技术改进 Java 代码质量! Page navigation 软件质量与软件测试如何诊断与调试 Java 代码中的 Bug?如何静态测试 Java 代码?如何实践测试驱动开发?软件测试自动化Java 开发测试与 IBM Rational 产品平台高质量代码中往…

c:\Windows\System32\drivers\etc\hosts的作用

c:\Windows\System32\drivers\etc\hosts 是域名解析文件。 可以直接用记事本打开。将IP地址重定向。 格式为:ip地址-空格-域名 可以将一个域名重新定向到一个IP 通过它可以达到以下目的: 1、加快域名解析 对于要经常访问的网站,我们可以通过…

【郭林专刊】Java XML 技术专题

Page navigation XML 基础教程XML 和 Java 技术Java XML文档模型JAXP(Java API for XML Parsing)StAX(Streaming API for XML)XJ(XML Enhancements for Java)XML 验证XPathXQueryXSL 转换处理器XStream数据…

heapq堆排序

时间复杂度:O(nlogn)堆:一种特殊的完全二叉树满二叉树:一个二叉树,如果每一个层的节点数都达到最大值,并且所有叶子节点都在同一层,则这个二叉树就是满二叉树完全二叉树:叶结点只能出现在最下层…

【郭林专刊】Java 多线程与并发编程专题

Page navigation Java 线程基础Java 多线程开发线程安全与同步并发控制非阻塞套接字(NIO)Java 5 中的并发JDK 7 中的 Fork/Join 模式相关书评Java 平台提供了一套广泛而功能强大的 API、工具和技术。其中,内建支持线程是它的一个强大的功能。…

从Qt 4到Qt 5需要修改的地方

1、 一般的 Qt 4 程序要在 Qt 5 上编译&#xff0c;需要注意&#xff1a;A.将 main.cpp 文件中的 #include<QtGui/QApplication> 修改为 #include<QApplication> B.在 .pro 项目文件中添加&#xff1a;greaterThan(QT_MAJOR_VERSION, 4): QT widgets原因是&#x…

快速实现动态图

「Bar Chart Race」可以实现动态可视化的python包。安装后可以快速实现动态图的制作&#xff0c;几行代码就搞定&#xff01;安装提示&#xff1a;使用pip install是0.1版本的&#xff0c;建议安装0.2&#xff0c;可以在github下载安装最新的。展示【还是使用我上次爬的冠状病毒…

C 编译、链接、加载

一、概述 C语言的编译链接过程要把我们编写的一个c程序&#xff08;源代码&#xff09;转换成可以在硬件上运行的程序&#xff08;可执行代码&#xff09;&#xff0c;需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作…