首页 > 编程语言 >Python中用来排序的方法sort、sorted

Python中用来排序的方法sort、sorted

时间:2024-07-20 15:08:28浏览次数:17  
标签:sort tuple Python self list key sorted Out

sort 与 sorted 区别:

  1. sort 是应用在 list 上的方法,而sorted 可以对所有可迭代的对象(他们可以是list、dict、set、甚至是字符串)进行排序操作。
  2. list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
  3. sorted方法为内置方法,sort方法为属性方法。
  4. sort是在原位重新排列列表,而sorted()是产生一个新的列表。
  5. 推荐使用内置方法,效率更高,所以使用sorted更好。

sort方法原型:

>>> help(list.sort)
L.sort(cmp=None, key=None, reverse=False)

sorted方法原型:

>>> help(sorted)
sorted(iterable,key=None, reverse=False)

参数说明:

  • iterable -- 可迭代对象。
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

sorted使用方法

1、对列表排序,返回的对象不会改变原列表,返回新列表

list = [1,5,7,2,4]
sorted(list)
Out[87]: [1, 2, 4, 5, 7]
#可以设定时候排序方式,默认从小到大,设定reverse = False 可以从大到小
sorted(list,reverse=False)
Out[88]: [1, 2, 4, 5, 7]
sorted(list,reverse=True)
Out[89]: [7, 5, 4, 2, 1]

2、根据自定义规则来排序,使用参数:key

# 使用key,默认搭配lambda函数使用
sorted(chars,key=lambda x:len(x))
Out[92]: ['a', 'is', 'boy', 'bruce', 'handsome']

sorted(chars,key=lambda x:len(x),reverse= True)
Out[93]: ['handsome', 'bruce', 'boy', 'is', 'a']

3、根据自定义规则来排序,对元组构成的列表进行排序

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
#key=lambda x: x[1]中可以任意选定x中可选的位置进行排序
sorted(tuple_list, key=lambda x: x[1]) 

Out[94]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]

sorted(tuple_list, key=lambda x: x[0])
Out[95]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]

sorted(tuple_list, key=lambda x: x[2])
Out[96]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

4、排序的元素是自定义类

class tuple_list:
    def __init__(self, one, two, three):
        self.one = one
        self.two = two
        self.three = three
    def __repr__(self):
        return repr((self.one, self.two, self.three))

tuple_list_ = [tuple_list('A', 1,5), tuple_list('B', 3,2), tuple_list('C', 2,6)]
sorted(tuple_list_, key=lambda x: x.one)
Out[104]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]
sorted(tuple_list_, key=lambda x: x.two)
Out[105]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]
sorted(tuple_list_, key=lambda x: x.three)
Out[106]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

5、sorted 也可以根据多个字段来排序

class tuple_list:
    def __init__(self, one, two, three):
        self.one = one
        self.two = two
        self.three = three
    def __repr__(self):
        return repr((self.one, self.two, self.three))

tuple_list_ = [tuple_list('C', 1,5), tuple_list('A', 3,2), tuple_list('C', 2,6)]
# 首先根据one的位置来排序,然后根据two的位置来排序
sorted(tuple_list_, key=lambda x:(x.one, x.two))
Out[112]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)]

6、使用operator 中的itemgetter方法和attrgetter方法

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
class tuple_list_class:
    def __init__(self, one, two, three):
        self.one = one
        self.two = two
        self.three = three
    def __repr__(self):
        return repr((self.one, self.two, self.three))
tuple_list_ = [tuple_list_class('C', 1,5), tuple_list_class('A', 3,2), tuple_list_class('C', 2,6)]
from operator import itemgetter
sorted(tuple_list, key=itemgetter(1))
Out[119]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]
from operator import attrgetter
sorted(tuple_list_, key=attrgetter('one')) # attrgetter 传入的参数必须是str
Out[120]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)] 
# 如果是根据多个类的参数排序,按照参数定义顺序
from operator import attrgetter
sorted(tuple_list_, key=attrgetter('two','one'))
Out[121]: [('C', 1, 5), ('C', 2, 6), ('A', 3, 2)]

高级用法

有时候,我们要处理的数据内的元素不是一维的,而是二维的甚至是多维的,那要怎么进行排序呢?这时候,sorted()函数内的key参数就派上用场了!从帮助信息上可以了解到,key参数可传入一个自定义函数。那么,该如何使用呢?让我们看看如下代码:

>>>l=[('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)]
>>>sorted(l, key=lambda x:x[0])
Out[39]: [('a', 1), ('b', 2), ('c', 6), ('d', 4), ('e', 3)]
>>>sorted(l, key=lambda x:x[0], reverse=True)
Out[40]: [('e', 3), ('d', 4), ('c', 6), ('b', 2), ('a', 1)]
>>>sorted(l, key=lambda x:x[1])
Out[41]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]
>>>sorted(l, key=lambda x:x[1], reverse=True)
Out[42]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]

这里,列表里面的每一个元素都为二维元组,key参数传入了一个lambda函数表达式,其x就代表列表里的每一个元素,然后分别利用索引返回元素内的第一个和第二个元素,这就代表了sorted()函数利用哪一个元素进行排列。而reverse参数就如同上面讲的一样,起到逆排的作用。默认情况下,reverse参数为False。
当然,正如一开始讲到的那样,如果想要对列表直接进行排序操作,可以用成员方法sort()来做:

#学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078
>>>l.sort(key=lambda x : x[1])
>>>l
Out[45]: [('a', 1), ('b', 2), ('e', 3), ('d', 4), ('c', 6)]
>>>l.sort(key=lambda x : x[1], reverse=True)
>>>l
Out[47]: [('c', 6), ('d', 4), ('e', 3), ('b', 2), ('a', 1)]

对于三维及以上的数据排排序,上述方法同样适用。

标签:sort,tuple,Python,self,list,key,sorted,Out
From: https://www.cnblogs.com/python1111/p/18313131

相关文章

  • Python教程:json中load和loads的区别
    一.相同点dump和dumps都实现了序列化load和loads都实现反序列化变量从内存中变成可存储或传输的过程称之为序列化序列化是将对象状态转化为可保存或可传输格式的过程。变量内容从序列化的对象重新读到内存里称之为反序列化反序列化是流转换为对象。二.区别1.load......
  • Python中,如何使用反斜杠 “\“分割字符串?
    Python语言使用反斜杠(\)作为转义符,对一些字符进行转义(escape),例如"\n""\r\n"等。所以当Python字符串中如果出现反斜杠,则会自动转义其后的字符。但这会导致一个问题,就是,如果只是把反斜杠作为字符字面(liberal)意义,应该如何处理?如果不使用re模块(regularexpressionmodule),在Py......
  • Python中4种方法实现 xls 文件转 xlsx
    在Python中,可以采用pandas、pyexcel、win32com和xls2xlsx这四个模块,实现xls转xlsx格式。以Excel示例文件test_Excel.xls为例,具体内容如下图所示:1.pandas安装命令pipinstallpandas-ihttps://mirrors.aliyun.com/pypi/simple具体使用方法importpandasas......
  • 【Python爬虫学习】7个好玩有趣的爬虫教程!(附源码)
    本文介绍了7个Python爬虫小案例,包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息,帮助读者理解并实践Python爬虫基础知识。在文章开始之前先给大家简单介绍一下python爬虫1.什么是爬虫?简单介绍爬虫爬虫的......
  • 用Python将多个excel内容整合成一个excel档
    print("開始!")importosimportpandasaspd设置文件夹路径folder_path='D:\123456'folder_path='D:\1-24714'创建一个空的DataFrame用于存储数据all_data=pd.DataFrame()遍历文件夹中的所有文件forfile_nameinos.listdir(folder_path):iffile_name.ends......
  • 【Python】成功解决TypeError: ‘int’ object is not iterable
    【Python】成功解决TypeError:‘int’objectisnotiterable......
  • Python按条件筛选、剔除表格数据并绘制剔除前后的直方图
      本文介绍基于Python语言,读取Excel表格文件数据,以其中某一列数据的值为标准,对于这一列数据处于指定范围的所有行,再用其他几列数据的数值,加以数据筛选与剔除;同时,对筛选前、后的数据分别绘制若干直方图,并将结果数据导出保存为一个新的Excel表格文件的方法。  首先,我们来明确一......
  • 千字长文讲解python装饰器
    1.装饰器是一个用于封装函数或类的代码的工具。它显式的将封装器应用到函数或类上,从而使它们选择加入到装饰器的功能中【装饰器不仅可以装饰函数,也可以装饰类】。2.对于①在函数运行前处理常见前置条件(例如确认授权),或②在函数运行后确保清理(例如输出清除或异常处理)装饰器都......
  • 蓝桥杯Python算法竞赛常用的函数库
    博客主页:音符犹如代码系列专栏:Python关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞......
  • 【python模块】Selenium
    声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。文章目录Selenium库功能介绍环境准备示例代码Selenium库Selenium库是一个强大的Web自动化工具,允许开发者通过编写脚本来控制浏览器,实现......