Python3内置函数-sorted

功能

对一个可迭代对象(iterable)进行排序,返回一个新列表

语法

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

参数

  • iterable:可迭代对象

  • key:用来进行元素比较的参数,可以由程序员指定可迭代对象中的同一位置元素来进行排序。key是快速的,因为key指定的函数将准确地对每个元素调用。key可以使用匿名函数lambda

  • reverse:排序规则,可选关键字参数,默认值False,升序排列;True,降序排列

返回值

返回一个重新排序的新列表

实例

  • 使用可选关键字参数reverse

reverse(意为反转)用来确定排序结果是否反转,默认值是False(升序排列),可指定值为True(降序排列)

print(sorted('dcabegf'))                   # 默认升序

print(sorted('dcabegf', reverse = True))   # 降序排列
  • 使用key方法

key是一个方法,默认值是None,用来指定具体的排序算法;sorted对可迭代对象的每个元素使用key算法后再排序,返回一个排序后的可迭代对象。

# 按年龄排序,以列表元素tuple的第3个索引排序,升序排序
students=[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

print(sorted(students, key=lambda s: s[2])) 
print(sorted(students, key=lambda s: s[2], reverse=True)) # 降序排序
# 字符转换成小写后再排序,'a'和'A'值一样
a = ['a','s','d','X','D','U','H','G','E','s','d','a','s']

sorted(a, key = str.lower) 
# sort by age
class Student:
    def __init__(self, name, grade, age):
        self.name = name
        self.grade = grade
        self.age = age
    def __repr__(self):
        return repr((self.name, self.grade, self.age))

student_objects = [
        Student('john', 'A', 15),
        Student('jane', 'B', 12),
        Student('dave', 'B', 10)]

sorted(student_objects, key=lambda student: student.age)   
  • sort与sorted区别

sort是应用在list上的方法(或叫成员函数),而sorted可以对所有可迭代的对象进行排序操作的内置函数。

# sort仅能修改list,sort在原来的list上进行操作
L = [5, 2, 3, 1, 4]

L.sort()
print(L) 

# sorted()对所有的可迭代序列都有效
sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})

list的sort方法是在原位重新排列列表,而sorted()是产生一个新的列表,而不是在原来的基础上进行操作。

a = [5,7,6,3,4,1,2]

b = sorted(a)       # 保留原列表a
print(a)
print(b)
  • operator模块函数

key参数的使用非常广泛,因此python提供了一些方便的函数,使得访问方法更加容易和快速。operator模块有itemgetter,attrgetter,methodcaller方法。使用这些方法,上面的操作将变得更加简洁和快速。

from operator import itemgetter

student_tuples = [
        ('john', 'A', 15),
        ('jane', 'B', 12),
        ('dave', 'B', 10)
        ]

sorted(student_tuples, key=itemgetter(2))
from operator import attrgetter

class Student:
    def __init__(self, name, grade, age):
        self.name = name
        self.grade = grade
        self.age = age
    def __repr__(self):
        return repr((self.name, self.grade, self.age))

student_objects = [
        Student('john', 'A', 15),
        Student('jane', 'B', 12),
        Student('dave', 'B', 10)]

sorted(student_objects, key=attrgetter('age'))

operator模块还允许多级排序,例如先以grade,然后再以age来排序

from operator import itemgetter,attrgetter

class Student:
    def __init__(self, name, grade, age):
        self.name = name
        self.grade = grade
        self.age = age
    def __repr__(self):
        return repr((self.name, self.grade, self.age))

student_objects = [
        Student('john', 'A', 15),
        Student('jane', 'B', 12),
        Student('dave', 'B', 10)
        ]

student_tuples = [
        ('john', 'A', 15),
        ('jane', 'B', 12),
        ('dave', 'B', 10)
        ]

print(sorted(student_tuples, key=itemgetter(1, 2)))
sorted(student_objects, key=attrgetter('grade', 'age'))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值