sorted函数对列表排序

sorted函数是Python内置的排序函数。它接受一个可迭代的对象作为输入,返回一个新的经过排序的列表。

语法格式如下: sorted(iterable, key=None, reverse=False)

参数说明:

  • iterable:可迭代对象,例如列表、元组、字符串等。
  • key:可选参数,用于指定排序的方式,可以是一个函数或者lambda表达式。默认值为None,表示按照元素的大小进行排序。
  • reverse:可选参数,用于指定是否降序排列。默认值为False,表示升序排列。

注意:sorted函数返回一个新的已排序的列表,原始列表不会被修改。如果要对原始列表进行排序,可以使用列表的sort方法。

1.简单数字

如果列表元素是一个个数字,直接调用函数即可。

list1 = [2, 6, 3, 8]
# 升序排列
print(sorted(list1))  # 输出:[2, 3, 6, 8]
# 倒序排列
print(sorted(list1, reverse=True))  # 输出:[8, 6, 3, 2]
2.嵌套列表或元组

若列表中嵌套了列表或元组作为元素,可指定元素列表某个位置的值作为排序依据。

list2 = [
    [88, 90, 94],
    [94, 80, 88],
    [80, 92, 86],
]
# 1.根据元素列表的第一个值作为排序依据
print(sorted(list2, key=lambda x: x[0]))
# 输出:[[80, 92, 86], [88, 90, 94], [94, 80, 88]]
# 2.根据元素列表的第二个值作为排序依据
print(sorted(list2, key=lambda x: x[1]))
# 输出:[[94, 80, 88], [88, 90, 94], [80, 92, 86]]
# 3.根据元素列表的第三个值作为排序依据
print(sorted(list2, key=lambda x: x[2]))
# 输出:[[80, 92, 86], [94, 80, 88], [88, 90, 94]]
3.嵌套字典

若列表中嵌套了字典,可指定元素字典某个键的值作为排序依据。

list2 = [
    {'name': '张三', 'yuwen': 88, 'shuxue': 90, 'yingyu': 94},
    {'name': '李四', 'yuwen': 94, 'shuxue': 80, 'yingyu': 88},
    {'name': '王五', 'yuwen': 80, 'shuxue': 92, 'yingyu': 86},
]
# 1.根据字典中yuwen键的值进行排序
print(sorted(list2, key=lambda x: x['yuwen']))
# [{'name': '王五', 'yuwen': 80, 'shuxue': 92, 'yingyu': 86},
# {'name': '张三', 'yuwen': 88, 'shuxue': 90, 'yingyu': 94},
# {'name': '李四', 'yuwen': 94, 'shuxue': 80, 'yingyu': 88}]

# 其他同理
4.多重排序且顺序相同

要实现多重排序,只需要在key参数的匿名函数中返回多个值即可。

list3 = [
    [88, 90, 94],
    [94, 80, 88],
    [80, 90, 86],
]
# 先根据第二个值从小到大排序,第二个值相同的,按第一个值从小到大排序
# 优先级是从左到右
print(sorted(list3, key=lambda x: (x[1], x[0])))
# 输出:[[94, 80, 88], [80, 90, 86], [88, 90, 94]]
5.多重排序且顺序相反

有多重排序,但顺序是一个升序,一个降序的。解决方法也简单,在反向的值前面加上负号。

list3 = [
    [88, 90, 94],
    [94, 80, 88],
    [80, 90, 86],
]
# 先根据第二个值从小到大排序,第二个值相同的,按第一个值从大到小排序
print(sorted(list3, key=lambda x: (x[1], -x[0])))
# 输出:[[94, 80, 88], [88, 90, 94], [80, 90, 86]]

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值