python set函数 返回排序_Python排序函数的使用方法详解

python set函数 返回排序_Python排序函数的使用方法详解Python 排序函数完美体现了 Python 语言的简洁性 对于 List 对象 我们可以直接调用 sort 函数 这里称为 方法 更合适 来进行排序 而对于其他可迭代对象 如 set dict 我们可以使用更灵活的 sorted 函数 一 List 的 sort 函数 Python 源码 builtins py 文件对 sort 函数的定义如下 defsort self key None reverse Fa

Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为”方法”更合适)来进行排序,而对于其他可迭代对象(如set,dict),我们可以使用更灵活的sorted()函数。

一.List的sort()函数

Python源码builtins.py文件对sort()函数的定义如下

def sort(self, key=None, reverse=False):

“”” L.sort(key=None, reverse=False) -> None — stable sort *IN PLACE* “””

pass

可以看出:sort()函数没有返回值,有两个参数。key表示的是排依据的函数;reverse是指需不需要反转列表,默认为False表示的是升序,如果设为True表示的是降序。

sort()用法如下

L = [1, 2, 7, 4, 3]

L.sort()

print(L)

#[1, 2, 3, 4, 7]

我们加入一些参数来看看,如降序排序:

L = [1, 2, 7, 4, 3]

L.sort(reverse=True)

print(L)

#[7, 4, 3, 2, 1]

再比如,我们想通过key来实现降序排序,这里用到匿名函数lambda:

L = [1, 2, 7, 4, 3]

L.sort(key=lambda x : x*(-1))

print(L)

#[7, 4, 3, 2, 1]

当然,key还有很多用法,我们可以将其设为内置函数或者自定义函数,比如用绝对值函数:

L = [-1, 2, -7, 4, 3]

L.sort(key=abs)

print(L)

#[-1, 2, 3, 4, -7]

Python3对key的还有另外一种支持,就是通过functools模块的cmp_to_key函数,将传统的cmp函数转为key。这和lambda函数用法类似,但是对于比较的逻辑比较复杂的情况,这样的方式会更清晰更便于维护。

from functools import cmp_to_key

L = [-1, 2, -7, 4, 3]

def cmp(a,b):

if abs(a) < abs(b):

return -1

else:

return 1

L.sort(key=cmp_to_key(cmp))

print(L)

二.sorted()

比起sort()函数只能排序列表,sorted函数更通用一些。官方文档对其有详细说明:

sorted(iterable, *, key=None, reverse=False)

Return a new sorted list from the items in iterable.

sorted()返回值为List类型。参数列表iterable表示可迭代对象;*表示位置参数就此终结,后面的参数都必须用关键字来指定;key与reverse参数用法与sort()完全一致。

sorted()用法如下:

L = [1, 2, 7, 4, 3]

L1 = sorted(L)

print(L1)

#[1, 2, 3, 4, 7]

对于reverse和key的用法就不单独展示了,可以参考sort()。如果我们想要排序的对象是一个集合,那么用法与列表排序一样:

S = {1, 2, 7, 4, 3}

S1= sorted(S)

print(S1)

#[1, 2, 3, 4, 7]

注意这个排序对象是set对象,而结果是一个列表对象(set对象本就没有顺序一说)。如果我们要实现一个复杂一点的排序呢?比如对字典排序,排序依据是键值,排序结果是由键值对组成的列表:

Dict = {‘a’:2, ‘b’:3, ‘c’:7, ‘d’:4, ‘e’:1}

L = sorted(Dict.items(), key=lambda x : x[1])

print(L)

#[(‘e’, 1), (‘a’, 2), (‘b’, 3), (‘d’, 4), (‘c’, 7)]

最后给一个Leetcode上的题(根据字符出现频率排序):

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

输入:

“tree”

输出:

“eert”

解释:

‘e’出现两次,’r’和’t’都只出现一次。因此’e’必须出现在’r’和’t’之前。此外,”eetr”也是一个有效的答案。

通过使用sorted函数代码就很清晰易读了:

def frequencySort(s):

d = {}

for i in s:

d[i] = d.get(i,0) + 1

L = sorted(d.keys(), key=lambda x: d[x], reverse=True)

s = ”

for i in L:

s += i * d[i]

return s

注意这里的d.keys()生成的是一个由key组成的可迭代对象,而前面代码的Dict.items()生成的是一个由键值对对象(这是一个Tuple对象)组成的可迭代对象。

到此这篇关于Python排序函数用法的文章就介绍到这了,更多相关Python排序函数用法内容请搜索随便开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持随便开发网!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209312.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午9:32
下一篇 2026年3月19日 上午9:33


相关推荐

  • Java–重新认识八种基本数据类型,以后入职不给公司大佬挖坑

    Java–重新认识八种基本数据类型,以后入职不给公司大佬挖坑欢迎进来学习的小伙伴 学习背景 相信很多初学 Java 的小伙伴或者已经入行的 xdm 必然了解 Java 的八种基本数据类型 Java 的数据类型主要分为引用数据类型和基本数据类型 引用数据类型就是平时大家说的万物皆对象 Object 而基本数据类型 对应的有八种 大家应该都记得 也可能不知道或者记不全了 哈哈哈 如果你是 Java 初学者 那么当你去面试 Java 初级工程师的时候 面试官可能会比较喜欢问这个问题 主要是想考察小伙伴们对基本数据类型了解多少 写代码时会不会乱用基本数据类型 给公司的大佬们挖坑 哈哈哈

    2026年3月18日
    2
  • 序列化和反序列化的简单理解[通俗易懂]

    序列化和反序列化的简单理解[通俗易懂]一、序列化和反序列化的概念  把对象转换为字节序列的过程称为对象的序列化。  把字节序列恢复为对象的过程称为对象的反序列化。  对象的序列化主要有两种用途:  1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;  2)在网络上传送对象的字节序列。  在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是

    2022年6月29日
    25
  • HQL 多表联合查询「建议收藏」

    HQL 多表联合查询「建议收藏」HQL联表查询语句select h from Hytxbz as h,Tgbzk as t where h.hytxbzid=t.hytxbzid and t.bztgid=:bztgid如果想取得对应属性的话,也可以这样写 select h.hytxbzid from Hytxbz as h,Tgbzk as t where h.hytxbzid=t.hytxbzid 

    2022年5月10日
    37
  • 高并发下线程安全的单例模式(最全最经典)

    高并发下线程安全的单例模式(最全最经典)在所有的设计模式中,单例模式是我们在项目开发中最为常见的设计模式之一,而单例模式有很多种实现方式,你是否都了解呢?高并发下如何保证单例模式的线程安全性呢?如何保证序列化后的单例对象在反序列化后任然是单例的呢?这些问题在看了本文之后都会一一的告诉你答案,赶快来阅读吧!

    2022年5月16日
    39
  • 关于c#中的dialogresult

    关于c#中的dialogresult
    在botton里面设置dialogresult为ok的时候,按下按钮窗口会自然关闭,这是由于窗口时模态显示的原因
    这种方式多用于设置对话框吧。。。
    但是更多时候必须判断对话框里里的输入是否有效或者其他一些判断
    所以不推荐奖button的dialogresult属性直接设置为ok
    而是动态用代码实现,但条件成立的时候写上
    this.DialogResult=DialogResult.ok;
    这样可以避免一些异常的捕捉和判断。。。

    2022年6月22日
    43
  • 浅谈VGGNet

    浅谈VGGNet1 VGGNet 架构 VGG16 1 输入 224x224x3 的图片 经 64 个 3×3 的卷积核作两次卷积 ReLU 卷积后的尺寸变为 224x224x642 作 maxpooling 最大化池化 池化单元尺寸为 2×2 效果为图像尺寸减半 池化后的尺寸变为 112x112x643 经 128 个 3×3 的卷积核作两次卷积 ReLU 尺寸变为 112x112x1284 作 2×2 的 maxpooling

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号