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序列排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • jupyter notebook读取/导出文件/图片实例

    jupyter notebook读取/导出文件/图片实例

    这篇文章主要介绍了jupyter notebook读取/导出文件/图片实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python下调用Linux的Shell命令的方法

    Python下调用Linux的Shell命令的方法

    有时候难免需要直接调用Shell命令来完成一些比较简单的操作,这篇文章主要介绍了Python下调用Linux的Shell命令的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Python 遗传算法处理TSP问题详解

    Python 遗传算法处理TSP问题详解

    遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法
    2022-11-11
  • python中os和sys模块的区别与常用方法总结

    python中os和sys模块的区别与常用方法总结

    这篇文章主要给大家介绍了关于python中os和sys模块的区别与常用方法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-11-11
  • Tensorflow使用Anaconda、pycharm安装记录

    Tensorflow使用Anaconda、pycharm安装记录

    这篇文章主要介绍了Tensorflow使用Anaconda、pycharm安装记录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • python用tkinter实现一个gui的翻译工具

    python用tkinter实现一个gui的翻译工具

    这篇文章主要介绍了python用tkinter实现一个gui的翻译工具,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 +
    2020-10-10
  • Python对Tornado请求与响应的数据处理

    Python对Tornado请求与响应的数据处理

    这篇文章主要介绍了Python对Tornado请求与响应的数据处理,需要的朋友可以参考下
    2020-02-02
  • 简单介绍Python的Django框架的dj-scaffold项目

    简单介绍Python的Django框架的dj-scaffold项目

    这篇文章主要介绍了简单介绍Python的Django框架的dj-scaffold项目,用于辅助Django框架的目录设置,需要的朋友可以参考下
    2015-05-05
  • Python自动化办公之图片转PDF的实现

    Python自动化办公之图片转PDF的实现

    实现图片转换成PDF文档的操作方法有很多,综合对比以后感觉fpdf这个模块用起来比较方便而且代码量相当少。所以本文将利用Python语言实现图片转PDF,感兴趣的可以了解一下
    2022-04-04
  • tensorflow模型的save与restore,及checkpoint中读取变量方式

    tensorflow模型的save与restore,及checkpoint中读取变量方式

    这篇文章主要介绍了tensorflow模型的save与restore,及checkpoint中读取变量方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论