Python序列排序的具体场景实现

 更新时间:2025年01月16日 10:17:55   作者:Python热爱者  
本文主要介绍了Python序列排序的具体场景实现,主要介绍了内置的sort()方法或者全局的sorted()方法着两种方法,具有一定的参考价值,感兴趣的可以了解一下

python中,一般在涉及到列表排序时,都用内置的sort()方法或者全局的sorted()方法,区别如下:

1、sort()方法只能用于列表排序,不能用于字符串,字典等其他可迭代序列;sorted()方法可以用于所有的可迭代序列;

2、sort()方法是在原列表基础上进行排序,返回None,会破坏原始列表结构;sorted()方法是返回一个排序后的新序列,对原始列表无影响;

#sort()排序
>>> a=[6,9,8,4,3,1,2]
>>> b=a.sort()
>>> print(b)
None
>>> print(a)
[1, 2, 3, 4, 6, 8, 9]

#sorted()排序
>>> a=[6,9,8,4,3,1,2]
>>> b=sorted(a)
>>> print(b)
[1, 2, 3, 4, 6, 8, 9]
>>> print(a)
[6, 9, 8, 4, 3, 1, 2]

字典排序时,sorted()方法默认是按照字典的键(key)排序的,如下:

>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'}
>>> b=sorted(a)
>>> print(b)
[1, 2, 3, 4, 5]

如果需要按照字典的value排序,可以用下面的方法:

>>> a={5:'A',1:'E',4:'B',2:'D',3:'C'}
>>> b=sorted(a.items(), key=lambda item:item[1])
>>> print(b)
[(5, 'A'), (4, 'B'), (3, 'C'), (2, 'D'), (1, 'E')]

高级用法

sort()方法和sorted()方法都可以指定参数来处理一些复杂场景的排序

1、key参数:指定一个函数,可以是内置函数,也可以是自己定义的函数,此函数将在每个元素比较前被调用。

2、reverse参数:此参数指定True or False,来进行降序或者升序,默认为False(升序)。

如下:

a = ["This", "A", "is", "bag"]
b = sorted(a, key=str.lower)
c = sorted(a, key=str.lower, reverse=True)
print(b)
print(c)

['A', 'bag', 'is', 'This']
['This', 'is', 'bag', 'A']

更广泛的使用情况是用复杂对象的某些值来对复杂对象的序列排序,例如:

一个列表保存着每个学生的姓名,档次和分数

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:531509025
student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96)
]

场景1、按档次从高到低进行排序

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: student[1]))

[('john', 'A', 96), ('andy', 'A', 92), ('cany', 'A', 96), ('jane', 'B', 82), ('dave', 'B', 85), ('leky', 'D', 63)]

场景2、按分数从高到低排序

方法(1)、使用reverse参数

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96),
]
print(sorted(student_tuples, key=lambda student: student[2], reverse=True))

[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]

方法(2)、使用负号(-)

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96),
]
print(sorted(student_tuples, key=lambda student: -student[2]))

[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]

注意:负号(-)只能用于数字前面,不能用于字符串前面

场景3、按档次从高到低进行排序,档次相同的按分数从高到底排序

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: [student[1], -student[2]]))

[('john', 'A', 96), ('cany', 'A', 96), ('andy', 'A', 92), ('dave', 'B', 85), ('jane', 'B', 82), ('leky', 'D', 63)]

场景4、按档次从低到高进行排序,档次相同的按分数从低到高排序

student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96)
]
print(sorted(student_tuples, key=lambda student: [student[1], -student[2]],reverse=True))

[('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('john', 'A', 96), ('cany', 'A', 96)]

场景5、按档次从低到高进行排序,档次相同的按分数从低到高排序,最后再按照姓名升序

姓名是字符串,不能在字符串前面用“符号(-)”来排序,可以重写“富比较”方法

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:531509025
class Reversinator(object):
    def __init__(self, obj):
        self.obj = obj

    def __lt__(self, other):
        return other.obj < self.obj


student_tuples = [
    ('john', 'A', 96),
    ('leky', 'D', 63),
    ('andy', 'A', 92),
    ('jane', 'B', 82),
    ('dave', 'B', 85),
    ('cany', 'A', 96),
]

print(sorted(student_tuples, key=lambda student: [student[1], -student[2], Reversinator(student[0])], reverse=True))

[('leky', 'D', 63), ('jane', 'B', 82), ('dave', 'B', 85), ('andy', 'A', 92), ('cany', 'A', 96), ('john', 'A', 96)]

到此这篇关于Python序列排序的具体场景实现的文章就介绍到这了,更多相关Python序列排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • PyTorch 检查GPU版本是否安装成功的操作

    PyTorch 检查GPU版本是否安装成功的操作

    这篇文章主要介绍了PyTorch 检查GPU版本是否安装成功的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Python 虚拟机字典dict内存优化方法解析

    Python 虚拟机字典dict内存优化方法解析

    这篇文章主要为大家介绍了Python 虚拟机字典dict内存优化方法解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 解读Python中的frame是什么

    解读Python中的frame是什么

    这篇文章主要介绍了解读Python中的frame是什么,关于frame使用讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 教大家玩转Python字符串处理的七种技巧

    教大家玩转Python字符串处理的七种技巧

    这篇文章主要给大家介绍了关于学会Python字符串处理的七种技巧,其中包括字符串的连接和合并、字符串的切片和相乘、字符串的分割、字符串的开头和结尾的处理、字符串的查找和匹配、字符串的替换以及字符串中去掉一些字符等操作,需要的朋友可以参考。
    2017-03-03
  • Python中int()函数的用法浅析

    Python中int()函数的用法浅析

    这篇文章主要介绍了Python中int()函数的用法浅析的相关资料,需要的朋友可以参考下
    2017-10-10
  • Python中的模型建模与选择策略详解

    Python中的模型建模与选择策略详解

    本文详细介绍了模型选择、超参数调优、特征工程和模型融合在机器学习中的重要性和具体方法,通过这些步骤,我们可以提高模型的准确性和泛化能力,从而在实际应用中取得更好的效果,每个部分都提供了理论知识和实际案例,帮助读者更好地理解和应用这些技术
    2025-01-01
  • php使用递归与迭代实现快速排序示例

    php使用递归与迭代实现快速排序示例

    这篇文章主要介绍了php使用递归与迭代实现快速排序的示例,大家参考使用吧
    2014-01-01
  • 使用Python给PDF添加文本超链接和图片超链接

    使用Python给PDF添加文本超链接和图片超链接

    超链接是指向特定资源的链接,作为一种有效的导航工具,它能够帮助读者快速访问相关信息,通过在PDF文档中添加文本超链接和图片超链接,你可以显著提升文档的互动性和用户体验,这篇文章将详细介绍如何使用Python给PDF添加文本超链接和图片超链接,需要的朋友可以参考下
    2025-03-03
  • 在python中路径含有空格的问题及解决

    在python中路径含有空格的问题及解决

    这篇文章主要介绍了在python中路径含有空格的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 尝试用最短的Python代码来实现服务器和代理服务器

    尝试用最短的Python代码来实现服务器和代理服务器

    "人生苦短、我用Python",Python最大的特点便是代码简洁,得益于Python自带的wsgiref包和socket模块,这里我们将尝试用最短的Python代码来实现服务器和代理服务器:
    2016-06-06

最新评论